{
  "components": {
    "headers": {
      "X-Oddswire-Credit-Cost": {
        "description": "Account-scoped admission snapshot where authenticated: remaining excludes holds; used counts settled calls. Cost 1 reserves one credit; actual charge settles only after complete local write/flush. Inspect free account/usage by request ID for final state. UTC reset is RFC3339; overage is off. Unknown credentials disclose no account counters.",
        "schema": {
          "type": "string"
        }
      },
      "X-Oddswire-Credits-Limit": {
        "description": "Account-scoped admission snapshot where authenticated: remaining excludes holds; used counts settled calls. Cost 1 reserves one credit; actual charge settles only after complete local write/flush. Inspect free account/usage by request ID for final state. UTC reset is RFC3339; overage is off. Unknown credentials disclose no account counters.",
        "schema": {
          "type": "string"
        }
      },
      "X-Oddswire-Credits-Remaining": {
        "description": "Account-scoped admission snapshot where authenticated: remaining excludes holds; used counts settled calls. Cost 1 reserves one credit; actual charge settles only after complete local write/flush. Inspect free account/usage by request ID for final state. UTC reset is RFC3339; overage is off. Unknown credentials disclose no account counters.",
        "schema": {
          "type": "string"
        }
      },
      "X-Oddswire-Credits-Reserved": {
        "description": "Account-scoped admission snapshot where authenticated: remaining excludes holds; used counts settled calls. Cost 1 reserves one credit; actual charge settles only after complete local write/flush. Inspect free account/usage by request ID for final state. UTC reset is RFC3339; overage is off. Unknown credentials disclose no account counters.",
        "schema": {
          "type": "string"
        }
      },
      "X-Oddswire-Credits-Reset": {
        "description": "Account-scoped admission snapshot where authenticated: remaining excludes holds; used counts settled calls. Cost 1 reserves one credit; actual charge settles only after complete local write/flush. Inspect free account/usage by request ID for final state. UTC reset is RFC3339; overage is off. Unknown credentials disclose no account counters.",
        "schema": {
          "type": "string"
        }
      },
      "X-Oddswire-Credits-Used": {
        "description": "Account-scoped admission snapshot where authenticated: remaining excludes holds; used counts settled calls. Cost 1 reserves one credit; actual charge settles only after complete local write/flush. Inspect free account/usage by request ID for final state. UTC reset is RFC3339; overage is off. Unknown credentials disclose no account counters.",
        "schema": {
          "type": "string"
        }
      },
      "X-Oddswire-Metering": {
        "description": "Account-scoped admission snapshot where authenticated: remaining excludes holds; used counts settled calls. Cost 1 reserves one credit; actual charge settles only after complete local write/flush. Inspect free account/usage by request ID for final state. UTC reset is RFC3339; overage is off. Unknown credentials disclose no account counters.",
        "schema": {
          "type": "string"
        }
      },
      "X-Oddswire-Overage": {
        "description": "Account-scoped admission snapshot where authenticated: remaining excludes holds; used counts settled calls. Cost 1 reserves one credit; actual charge settles only after complete local write/flush. Inspect free account/usage by request ID for final state. UTC reset is RFC3339; overage is off. Unknown credentials disclose no account counters.",
        "schema": {
          "type": "string"
        }
      },
      "X-Oddswire-Usage-State": {
        "description": "Account-scoped admission snapshot where authenticated: remaining excludes holds; used counts settled calls. Cost 1 reserves one credit; actual charge settles only after complete local write/flush. Inspect free account/usage by request ID for final state. UTC reset is RFC3339; overage is off. Unknown credentials disclose no account counters.",
        "schema": {
          "type": "string"
        }
      },
      "X-Request-ID": {
        "description": "Account-scoped admission snapshot where authenticated: remaining excludes holds; used counts settled calls. Cost 1 reserves one credit; actual charge settles only after complete local write/flush. Inspect free account/usage by request ID for final state. UTC reset is RFC3339; overage is off. Unknown credentials disclose no account counters.",
        "schema": {
          "type": "string"
        }
      }
    },
    "responses": {
      "Problem": {
        "content": {
          "application/problem+json": {
            "schema": {
              "$ref": "#/components/schemas/Problem"
            }
          }
        },
        "description": "Structured actionable problem; errors consume zero credits. Quota exhaustion/unconfigured returns 402 with counters/reset headers and free usage guidance. 429 Retry-After is separate abuse control. No database details or credentials.",
        "headers": {
          "X-Oddswire-Credit-Cost": {
            "$ref": "#/components/headers/X-Oddswire-Credit-Cost"
          },
          "X-Oddswire-Credits-Limit": {
            "$ref": "#/components/headers/X-Oddswire-Credits-Limit"
          },
          "X-Oddswire-Credits-Remaining": {
            "$ref": "#/components/headers/X-Oddswire-Credits-Remaining"
          },
          "X-Oddswire-Credits-Reserved": {
            "$ref": "#/components/headers/X-Oddswire-Credits-Reserved"
          },
          "X-Oddswire-Credits-Reset": {
            "$ref": "#/components/headers/X-Oddswire-Credits-Reset"
          },
          "X-Oddswire-Credits-Used": {
            "$ref": "#/components/headers/X-Oddswire-Credits-Used"
          },
          "X-Oddswire-Metering": {
            "$ref": "#/components/headers/X-Oddswire-Metering"
          },
          "X-Oddswire-Overage": {
            "$ref": "#/components/headers/X-Oddswire-Overage"
          },
          "X-Oddswire-Usage-State": {
            "$ref": "#/components/headers/X-Oddswire-Usage-State"
          },
          "X-Request-ID": {
            "$ref": "#/components/headers/X-Request-ID"
          }
        }
      }
    },
    "schemas": {
      "Account": {
        "additionalProperties": false,
        "properties": {
          "credential_kind": {
            "type": "string"
          },
          "entitlements": {
            "$ref": "#/components/schemas/Entitlements"
          },
          "id": {
            "type": "string"
          },
          "metering": {
            "enum": [
              "not_configured",
              "credits"
            ],
            "type": "string"
          },
          "mode": {
            "enum": [
              "local_operator",
              "account_ledger"
            ],
            "type": "string"
          },
          "name": {
            "type": "string"
          },
          "revision": {
            "type": "integer"
          },
          "role": {
            "type": "string"
          },
          "status": {
            "type": "string"
          }
        },
        "required": [
          "id",
          "mode",
          "metering",
          "entitlements"
        ],
        "type": "object"
      },
      "AccountPage": {
        "additionalProperties": false,
        "properties": {
          "data": {
            "items": {
              "$ref": "#/components/schemas/Account"
            },
            "type": "array"
          },
          "meta": {
            "$ref": "#/components/schemas/Meta"
          },
          "missing": {
            "items": {
              "$ref": "#/components/schemas/Missing"
            },
            "type": "array"
          }
        },
        "required": [
          "data",
          "missing",
          "meta"
        ],
        "type": "object"
      },
      "AlertDeliveriesPage": {
        "additionalProperties": false,
        "properties": {
          "data": {
            "items": {
              "$ref": "#/components/schemas/AlertDelivery"
            },
            "type": "array"
          },
          "meta": {
            "$ref": "#/components/schemas/Meta"
          },
          "missing": {
            "items": {
              "$ref": "#/components/schemas/Missing"
            },
            "type": "array"
          }
        },
        "required": [
          "data",
          "missing",
          "meta"
        ],
        "type": "object"
      },
      "AlertDelivery": {
        "additionalProperties": false,
        "properties": {
          "attempts": {
            "type": "integer"
          },
          "due_at": {
            "format": "date-time",
            "type": "string"
          },
          "event_id": {
            "type": "string"
          },
          "expires_at": {
            "format": "date-time",
            "type": "string"
          },
          "id": {
            "type": "string"
          },
          "logs": {
            "items": {
              "$ref": "#/components/schemas/AlertLog"
            },
            "type": "array"
          },
          "status": {
            "type": "string"
          },
          "target_id": {
            "type": "string"
          }
        },
        "required": [
          "id",
          "event_id",
          "target_id",
          "status",
          "attempts",
          "due_at",
          "expires_at",
          "logs"
        ],
        "type": "object"
      },
      "AlertEvent": {
        "additionalProperties": false,
        "properties": {
          "after": {
            "$ref": "#/components/schemas/PriceObservation"
          },
          "before": {
            "$ref": "#/components/schemas/PriceObservation"
          },
          "before_confirmed_ts": {
            "format": "date-time",
            "type": "string"
          },
          "change_bps": {
            "type": "string"
          },
          "detected_at": {
            "format": "date-time",
            "type": "string"
          },
          "direction": {
            "type": "string"
          },
          "expires_at": {
            "format": "date-time",
            "type": "string"
          },
          "id": {
            "type": "string"
          },
          "identity_scope": {
            "type": "string"
          },
          "method": {
            "type": "string"
          },
          "namespace": {
            "type": "string"
          },
          "rule_id": {
            "type": "string"
          },
          "source_region": {
            "type": "string"
          },
          "threshold_bps": {
            "type": "integer"
          },
          "type": {
            "enum": [
              "line_move.v1"
            ],
            "type": "string"
          },
          "within_seconds": {
            "type": "integer"
          }
        },
        "required": [
          "source_region",
          "threshold_bps",
          "within_seconds",
          "direction",
          "id",
          "type",
          "rule_id",
          "namespace",
          "identity_scope",
          "method",
          "change_bps",
          "before",
          "after",
          "before_confirmed_ts",
          "detected_at",
          "expires_at"
        ],
        "type": "object"
      },
      "AlertLog": {
        "additionalProperties": false,
        "properties": {
          "at": {
            "format": "date-time",
            "type": "string"
          },
          "attempt": {
            "type": "integer"
          },
          "elapsed_ms": {
            "type": "integer"
          },
          "http_status": {
            "type": "integer"
          },
          "reason": {
            "type": "string"
          },
          "state": {
            "type": "string"
          }
        },
        "required": [
          "at",
          "attempt",
          "state",
          "reason",
          "http_status",
          "elapsed_ms"
        ],
        "type": "object"
      },
      "AlertMutation": {
        "additionalProperties": false,
        "properties": {
          "request_id": {
            "type": "string"
          }
        },
        "required": [
          "request_id"
        ],
        "type": "object"
      },
      "AlertRule": {
        "additionalProperties": false,
        "properties": {
          "cursor_seq": {
            "type": "string"
          },
          "enabled": {
            "type": "boolean"
          },
          "id": {
            "type": "string"
          },
          "input": {
            "$ref": "#/components/schemas/AlertRuleInput"
          },
          "last_error": {
            "type": "string"
          },
          "processed": {
            "type": "integer"
          },
          "suppressed": {
            "type": "integer"
          }
        },
        "required": [
          "id",
          "input",
          "enabled",
          "cursor_seq",
          "last_error",
          "processed",
          "suppressed"
        ],
        "type": "object"
      },
      "AlertRuleInput": {
        "additionalProperties": false,
        "properties": {
          "direction": {
            "enum": [
              "either",
              "up",
              "down"
            ],
            "type": "string"
          },
          "key_id": {
            "type": "string"
          },
          "namespace": {
            "type": "string"
          },
          "native_fixture_id": {
            "$ref": "#/components/schemas/ID"
          },
          "quote_key": {
            "type": "string"
          },
          "request_id": {
            "type": "string"
          },
          "source_id": {
            "$ref": "#/components/schemas/ID"
          },
          "target_id": {
            "type": "string"
          },
          "threshold_bps": {
            "type": "integer"
          },
          "within_seconds": {
            "type": "integer"
          }
        },
        "required": [
          "request_id",
          "target_id",
          "key_id",
          "namespace",
          "source_id",
          "native_fixture_id",
          "quote_key",
          "threshold_bps",
          "within_seconds",
          "direction"
        ],
        "type": "object"
      },
      "AlertRulesPage": {
        "additionalProperties": false,
        "properties": {
          "data": {
            "items": {
              "$ref": "#/components/schemas/AlertRule"
            },
            "type": "array"
          },
          "meta": {
            "$ref": "#/components/schemas/Meta"
          },
          "missing": {
            "items": {
              "$ref": "#/components/schemas/Missing"
            },
            "type": "array"
          }
        },
        "required": [
          "data",
          "missing",
          "meta"
        ],
        "type": "object"
      },
      "AlertTarget": {
        "additionalProperties": false,
        "properties": {
          "created_at": {
            "format": "date-time",
            "type": "string"
          },
          "enabled": {
            "type": "boolean"
          },
          "id": {
            "type": "string"
          },
          "name": {
            "type": "string"
          },
          "revision": {
            "type": "integer"
          },
          "url": {
            "type": "string"
          }
        },
        "required": [
          "id",
          "name",
          "url",
          "enabled",
          "revision",
          "created_at"
        ],
        "type": "object"
      },
      "AlertTargetCreated": {
        "additionalProperties": false,
        "properties": {
          "shown_once": {
            "type": "boolean"
          },
          "signing_secret": {
            "type": "string"
          },
          "target": {
            "$ref": "#/components/schemas/AlertTarget"
          }
        },
        "required": [
          "target",
          "shown_once"
        ],
        "type": "object"
      },
      "AlertTargetCreatedPage": {
        "additionalProperties": false,
        "properties": {
          "data": {
            "items": {
              "$ref": "#/components/schemas/AlertTargetCreated"
            },
            "type": "array"
          },
          "meta": {
            "$ref": "#/components/schemas/Meta"
          },
          "missing": {
            "items": {
              "$ref": "#/components/schemas/Missing"
            },
            "type": "array"
          }
        },
        "required": [
          "data",
          "missing",
          "meta"
        ],
        "type": "object"
      },
      "AlertTargetInput": {
        "additionalProperties": false,
        "properties": {
          "name": {
            "type": "string"
          },
          "request_id": {
            "type": "string"
          },
          "url": {
            "type": "string"
          }
        },
        "required": [
          "request_id",
          "name",
          "url"
        ],
        "type": "object"
      },
      "AlertTargetsPage": {
        "additionalProperties": false,
        "properties": {
          "data": {
            "items": {
              "$ref": "#/components/schemas/AlertTarget"
            },
            "type": "array"
          },
          "meta": {
            "$ref": "#/components/schemas/Meta"
          },
          "missing": {
            "items": {
              "$ref": "#/components/schemas/Missing"
            },
            "type": "array"
          }
        },
        "required": [
          "data",
          "missing",
          "meta"
        ],
        "type": "object"
      },
      "Audit": {
        "additionalProperties": false,
        "properties": {
          "action": {
            "type": "string"
          },
          "actor_id": {
            "type": "string"
          },
          "created_at": {
            "format": "date-time",
            "type": "string"
          },
          "detail": {
            "type": "object"
          },
          "request_id": {
            "type": "string"
          },
          "seq": {
            "type": "integer"
          },
          "target_id": {
            "type": "string"
          }
        },
        "required": [
          "seq",
          "action",
          "request_id",
          "detail",
          "created_at"
        ],
        "type": "object"
      },
      "AuditPage": {
        "additionalProperties": false,
        "properties": {
          "data": {
            "items": {
              "$ref": "#/components/schemas/Audit"
            },
            "type": "array"
          },
          "meta": {
            "$ref": "#/components/schemas/Meta"
          },
          "missing": {
            "items": {
              "$ref": "#/components/schemas/Missing"
            },
            "type": "array"
          }
        },
        "required": [
          "data",
          "missing",
          "meta"
        ],
        "type": "object"
      },
      "BetaAccept": {
        "additionalProperties": false,
        "properties": {
          "acknowledged": {
            "type": "boolean"
          },
          "country": {
            "type": "string"
          },
          "token": {
            "type": "string"
          }
        },
        "required": [
          "token",
          "country",
          "acknowledged"
        ],
        "type": "object"
      },
      "BetaInvite": {
        "additionalProperties": false,
        "properties": {
          "access_until": {
            "format": "date-time",
            "type": "string"
          },
          "account_id": {
            "type": "string"
          },
          "country": {
            "type": "string"
          },
          "expires_at": {
            "format": "date-time",
            "type": "string"
          },
          "id": {
            "type": "string"
          },
          "recipient_id": {
            "type": "string"
          },
          "state": {
            "type": "string"
          }
        },
        "required": [
          "id",
          "account_id",
          "recipient_id",
          "country",
          "expires_at",
          "access_until",
          "state"
        ],
        "type": "object"
      },
      "BetaInviteCreated": {
        "additionalProperties": false,
        "properties": {
          "invite": {
            "$ref": "#/components/schemas/BetaInvite"
          },
          "secret": {
            "type": "string"
          },
          "shown_once": {
            "type": "boolean"
          }
        },
        "required": [
          "invite",
          "secret",
          "shown_once"
        ],
        "type": "object"
      },
      "BetaInviteCreatedPage": {
        "additionalProperties": false,
        "properties": {
          "data": {
            "items": {
              "$ref": "#/components/schemas/BetaInviteCreated"
            },
            "type": "array"
          },
          "meta": {
            "$ref": "#/components/schemas/Meta"
          },
          "missing": {
            "items": {
              "$ref": "#/components/schemas/Missing"
            },
            "type": "array"
          }
        },
        "required": [
          "data",
          "missing",
          "meta"
        ],
        "type": "object"
      },
      "BetaInviteInput": {
        "additionalProperties": false,
        "properties": {
          "access_until": {
            "format": "date-time",
            "type": "string"
          },
          "account_id": {
            "type": "string"
          },
          "country": {
            "type": "string"
          },
          "credits": {
            "type": "integer"
          },
          "expires_at": {
            "format": "date-time",
            "type": "string"
          },
          "reason": {
            "type": "string"
          },
          "recipient_id": {
            "type": "string"
          },
          "scope": {
            "$ref": "#/components/schemas/Entitlements"
          }
        },
        "required": [
          "account_id",
          "recipient_id",
          "country",
          "scope",
          "credits",
          "expires_at",
          "access_until",
          "reason"
        ],
        "type": "object"
      },
      "BetaPage": {
        "additionalProperties": false,
        "properties": {
          "data": {
            "items": {
              "$ref": "#/components/schemas/BetaView"
            },
            "type": "array"
          },
          "meta": {
            "$ref": "#/components/schemas/Meta"
          },
          "missing": {
            "items": {
              "$ref": "#/components/schemas/Missing"
            },
            "type": "array"
          }
        },
        "required": [
          "data",
          "missing",
          "meta"
        ],
        "type": "object"
      },
      "BetaPermission": {
        "additionalProperties": false,
        "properties": {
          "approved": {
            "type": "boolean"
          },
          "countries": {
            "items": {
              "type": "string"
            },
            "type": "array"
          },
          "evidence": {
            "type": "string"
          },
          "expires_at": {
            "format": "date-time",
            "type": "string"
          },
          "namespace": {
            "type": "string"
          },
          "provenance": {
            "type": "string"
          },
          "reason": {
            "type": "string"
          },
          "revision": {
            "type": "integer"
          },
          "source_id": {
            "type": "integer"
          },
          "source_region": {
            "type": "string"
          },
          "use_class": {
            "type": "string"
          }
        },
        "required": [
          "use_class",
          "namespace",
          "source_id",
          "provenance",
          "source_region",
          "countries",
          "approved",
          "evidence",
          "reason",
          "expires_at",
          "revision"
        ],
        "type": "object"
      },
      "BetaReport": {
        "additionalProperties": false,
        "properties": {
          "accounts": {
            "items": {
              "$ref": "#/components/schemas/BetaView"
            },
            "type": "array"
          },
          "activated": {
            "type": "integer"
          },
          "activated_within_24h": {
            "type": "integer"
          },
          "active": {
            "type": "integer"
          },
          "detail": {
            "type": "string"
          },
          "enrolled": {
            "type": "integer"
          },
          "environment": {
            "type": "string"
          },
          "invites": {
            "items": {
              "$ref": "#/components/schemas/BetaInvite"
            },
            "type": "array"
          },
          "pending_notices": {
            "type": "integer"
          },
          "permissions": {
            "items": {
              "$ref": "#/components/schemas/BetaPermission"
            },
            "type": "array"
          },
          "reserved_seats": {
            "type": "integer"
          },
          "retained_after_24h": {
            "type": "integer"
          },
          "seat_limit": {
            "type": "integer"
          }
        },
        "required": [
          "environment",
          "seat_limit",
          "reserved_seats",
          "enrolled",
          "active",
          "activated",
          "activated_within_24h",
          "retained_after_24h",
          "pending_notices",
          "accounts",
          "invites",
          "permissions",
          "detail"
        ],
        "type": "object"
      },
      "BetaReportPage": {
        "additionalProperties": false,
        "properties": {
          "data": {
            "items": {
              "$ref": "#/components/schemas/BetaReport"
            },
            "type": "array"
          },
          "meta": {
            "$ref": "#/components/schemas/Meta"
          },
          "missing": {
            "items": {
              "$ref": "#/components/schemas/Missing"
            },
            "type": "array"
          }
        },
        "required": [
          "data",
          "missing",
          "meta"
        ],
        "type": "object"
      },
      "BetaRevoke": {
        "additionalProperties": false,
        "properties": {
          "reason": {
            "type": "string"
          }
        },
        "required": [
          "reason"
        ],
        "type": "object"
      },
      "BetaView": {
        "additionalProperties": false,
        "properties": {
          "accepted_at": {
            "format": "date-time",
            "type": "string"
          },
          "account_id": {
            "type": "string"
          },
          "country": {
            "type": "string"
          },
          "data_calls": {
            "type": "integer"
          },
          "detail": {
            "type": "string"
          },
          "environment": {
            "type": "string"
          },
          "expires_at": {
            "format": "date-time",
            "type": "string"
          },
          "first_data_at": {
            "format": "date-time",
            "type": "string"
          },
          "first_key_at": {
            "format": "date-time",
            "type": "string"
          },
          "first_websocket_at": {
            "format": "date-time",
            "type": "string"
          },
          "free_calls": {
            "type": "integer"
          },
          "is_operator": {
            "type": "boolean"
          },
          "notice_delivery": {
            "type": "string"
          },
          "pending_calls": {
            "type": "integer"
          },
          "provenance": {
            "type": "string"
          },
          "scope": {
            "$ref": "#/components/schemas/Entitlements"
          },
          "state": {
            "type": "string"
          },
          "usage_viewed_at": {
            "format": "date-time",
            "type": "string"
          },
          "user_id": {
            "type": "string"
          }
        },
        "required": [
          "environment",
          "user_id",
          "account_id",
          "state",
          "detail",
          "is_operator",
          "notice_delivery",
          "country",
          "scope",
          "provenance",
          "data_calls",
          "free_calls",
          "pending_calls"
        ],
        "type": "object"
      },
      "BillingActionInput": {
        "additionalProperties": false,
        "properties": {
          "amount_minor": {
            "type": "integer"
          },
          "invoice_id": {
            "type": "string"
          },
          "plan": {
            "type": "string"
          },
          "product": {
            "type": "string"
          },
          "request_key": {
            "type": "string"
          },
          "trial": {
            "type": "boolean"
          }
        },
        "required": [
          "request_key",
          "product"
        ],
        "type": "object"
      },
      "BillingActionPage": {
        "additionalProperties": false,
        "properties": {
          "data": {
            "items": {
              "$ref": "#/components/schemas/BillingActionResult"
            },
            "type": "array"
          },
          "meta": {
            "$ref": "#/components/schemas/Meta"
          },
          "missing": {
            "items": {
              "$ref": "#/components/schemas/Missing"
            },
            "type": "array"
          }
        },
        "required": [
          "data",
          "missing",
          "meta"
        ],
        "type": "object"
      },
      "BillingActionResult": {
        "additionalProperties": false,
        "properties": {
          "created_at": {
            "format": "date-time",
            "type": "string"
          },
          "detail": {
            "type": "string"
          },
          "id": {
            "type": "string"
          },
          "kind": {
            "type": "string"
          },
          "provider_id": {
            "type": "string"
          },
          "request": {
            "$ref": "#/components/schemas/BillingActionInput"
          },
          "retryable": {
            "type": "boolean"
          },
          "state": {
            "type": "string"
          },
          "url": {
            "type": "string"
          }
        },
        "required": [
          "retryable",
          "id",
          "state",
          "detail"
        ],
        "type": "object"
      },
      "BillingInvoice": {
        "additionalProperties": false,
        "properties": {
          "amount_paid": {
            "type": "integer"
          },
          "currency": {
            "type": "string"
          },
          "customer": {
            "type": "string"
          },
          "id": {
            "type": "string"
          },
          "period_end": {
            "format": "date-time",
            "type": "string"
          },
          "price_id": {
            "type": "string"
          },
          "refund_pending": {
            "type": "integer"
          },
          "refunded": {
            "type": "integer"
          },
          "status": {
            "type": "string"
          },
          "subscription": {
            "type": "string"
          }
        },
        "required": [
          "id",
          "customer",
          "subscription",
          "price_id",
          "currency",
          "amount_paid",
          "refunded",
          "refund_pending",
          "status",
          "period_end"
        ],
        "type": "object"
      },
      "BillingNotice": {
        "additionalProperties": false,
        "properties": {
          "delivery": {
            "type": "string"
          },
          "due_at": {
            "format": "date-time",
            "type": "string"
          },
          "kind": {
            "type": "string"
          },
          "subscription_id": {
            "type": "string"
          }
        },
        "required": [
          "subscription_id",
          "kind",
          "due_at",
          "delivery"
        ],
        "type": "object"
      },
      "BillingPage": {
        "additionalProperties": false,
        "properties": {
          "data": {
            "items": {
              "$ref": "#/components/schemas/BillingView"
            },
            "type": "array"
          },
          "meta": {
            "$ref": "#/components/schemas/Meta"
          },
          "missing": {
            "items": {
              "$ref": "#/components/schemas/Missing"
            },
            "type": "array"
          }
        },
        "required": [
          "data",
          "missing",
          "meta"
        ],
        "type": "object"
      },
      "BillingPlan": {
        "additionalProperties": false,
        "properties": {
          "amount_minor": {
            "type": "integer"
          },
          "credits": {
            "type": "integer"
          },
          "currency": {
            "type": "string"
          },
          "id": {
            "type": "string"
          },
          "name": {
            "type": "string"
          },
          "product": {
            "type": "string"
          },
          "websocket": {
            "type": "boolean"
          }
        },
        "required": [
          "id",
          "name",
          "product",
          "amount_minor",
          "currency",
          "credits",
          "websocket"
        ],
        "type": "object"
      },
      "BillingSubscription": {
        "additionalProperties": false,
        "properties": {
          "cancel_at_period_end": {
            "type": "boolean"
          },
          "current_plan": {
            "type": "string"
          },
          "customer": {
            "type": "string"
          },
          "id": {
            "type": "string"
          },
          "invoice_id": {
            "type": "string"
          },
          "next_plan": {
            "type": "string"
          },
          "paid_until": {
            "anyOf": [
              {
                "format": "date-time",
                "type": "string"
              },
              {
                "type": "null"
              }
            ]
          },
          "period_end": {
            "anyOf": [
              {
                "format": "date-time",
                "type": "string"
              },
              {
                "type": "null"
              }
            ]
          },
          "price_id": {
            "type": "string"
          },
          "product": {
            "type": "string"
          },
          "revision": {
            "type": "integer"
          },
          "risk_hold": {
            "type": "boolean"
          },
          "status": {
            "type": "string"
          },
          "trial_end": {
            "anyOf": [
              {
                "format": "date-time",
                "type": "string"
              },
              {
                "type": "null"
              }
            ]
          }
        },
        "required": [
          "id",
          "customer",
          "product",
          "price_id",
          "status",
          "current_plan",
          "next_plan",
          "period_end",
          "trial_end",
          "paid_until",
          "cancel_at_period_end",
          "invoice_id",
          "risk_hold",
          "revision"
        ],
        "type": "object"
      },
      "BillingView": {
        "additionalProperties": false,
        "properties": {
          "actions": {
            "items": {
              "$ref": "#/components/schemas/BillingActionResult"
            },
            "type": "array"
          },
          "blocked": {
            "type": "string"
          },
          "credit_cycle": {
            "type": "string"
          },
          "enrolled": {
            "type": "boolean"
          },
          "invoices": {
            "items": {
              "$ref": "#/components/schemas/BillingInvoice"
            },
            "type": "array"
          },
          "mode": {
            "type": "string"
          },
          "notices": {
            "items": {
              "$ref": "#/components/schemas/BillingNotice"
            },
            "type": "array"
          },
          "pending_events": {
            "type": "integer"
          },
          "plans": {
            "items": {
              "$ref": "#/components/schemas/BillingPlan"
            },
            "type": "array"
          },
          "provider_ready": {
            "type": "boolean"
          },
          "subscriptions": {
            "items": {
              "$ref": "#/components/schemas/BillingSubscription"
            },
            "type": "array"
          },
          "tax": {
            "type": "string"
          }
        },
        "required": [
          "mode",
          "provider_ready",
          "enrolled",
          "blocked",
          "plans",
          "subscriptions",
          "invoices",
          "notices",
          "actions",
          "pending_events",
          "tax",
          "credit_cycle"
        ],
        "type": "object"
      },
      "Binding": {
        "additionalProperties": false,
        "properties": {
          "group_fixture_id": {
            "$ref": "#/components/schemas/ID"
          },
          "native_fixture_id": {
            "$ref": "#/components/schemas/ID"
          },
          "revision": {
            "type": "integer"
          },
          "source_fixture_id": {
            "type": "string"
          },
          "source_id": {
            "$ref": "#/components/schemas/ID"
          },
          "source_swapped": {
            "type": "boolean"
          },
          "state": {
            "type": "string"
          },
          "swapped": {
            "type": "boolean"
          }
        },
        "required": [
          "source_id",
          "source_fixture_id",
          "native_fixture_id",
          "state",
          "revision",
          "swapped",
          "source_swapped"
        ],
        "type": "object"
      },
      "Brand": {
        "additionalProperties": false,
        "properties": {
          "id": {
            "$ref": "#/components/schemas/ID"
          },
          "name": {
            "minLength": 1,
            "type": "string"
          },
          "slug": {
            "minLength": 1,
            "type": "string"
          }
        },
        "required": [
          "id",
          "slug",
          "name"
        ],
        "type": "object"
      },
      "Competition": {
        "additionalProperties": false,
        "properties": {
          "country": {
            "type": "string"
          },
          "external_ids": {
            "additionalProperties": {
              "type": "string"
            },
            "type": "object"
          },
          "id": {
            "$ref": "#/components/schemas/ID"
          },
          "name": {
            "minLength": 1,
            "type": "string"
          },
          "slug": {
            "minLength": 1,
            "type": "string"
          },
          "sport_id": {
            "$ref": "#/components/schemas/ID"
          }
        },
        "required": [
          "id",
          "sport_id",
          "slug",
          "name"
        ],
        "type": "object"
      },
      "CompetitionsPage": {
        "additionalProperties": false,
        "properties": {
          "data": {
            "items": {
              "$ref": "#/components/schemas/Competition"
            },
            "type": "array"
          },
          "meta": {
            "$ref": "#/components/schemas/Meta"
          },
          "missing": {
            "items": {
              "$ref": "#/components/schemas/Missing"
            },
            "type": "array"
          }
        },
        "required": [
          "data",
          "missing",
          "meta"
        ],
        "type": "object"
      },
      "CoveragePage": {
        "additionalProperties": false,
        "properties": {
          "data": {
            "items": {
              "$ref": "#/components/schemas/CoverageView"
            },
            "type": "array"
          },
          "meta": {
            "$ref": "#/components/schemas/Meta"
          },
          "missing": {
            "items": {
              "$ref": "#/components/schemas/Missing"
            },
            "type": "array"
          }
        },
        "required": [
          "data",
          "missing",
          "meta"
        ],
        "type": "object"
      },
      "CoverageSource": {
        "additionalProperties": false,
        "properties": {
          "brand": {
            "$ref": "#/components/schemas/Brand"
          },
          "collection": {
            "type": "string"
          },
          "entitled": {
            "type": "boolean"
          },
          "families": {
            "items": {
              "$ref": "#/components/schemas/Family"
            },
            "type": "array"
          },
          "fixture_count": {
            "type": "integer"
          },
          "fresh_slots": {
            "type": "integer"
          },
          "inplay": {
            "$ref": "#/components/schemas/InPlayCoverage"
          },
          "last_confirmed": {
            "format": "date-time",
            "type": "string"
          },
          "namespace": {
            "type": "string"
          },
          "quote_slots": {
            "type": "integer"
          },
          "rights": {
            "type": "string"
          },
          "source": {
            "$ref": "#/components/schemas/Source"
          },
          "state": {
            "type": "string"
          }
        },
        "required": [
          "inplay",
          "source",
          "brand",
          "namespace",
          "collection",
          "families",
          "entitled",
          "state",
          "rights"
        ],
        "type": "object"
      },
      "CoverageView": {
        "additionalProperties": false,
        "properties": {
          "competitions": {
            "items": {
              "$ref": "#/components/schemas/Competition"
            },
            "type": "array"
          },
          "fixtures": {
            "items": {
              "$ref": "#/components/schemas/NamespaceFixture"
            },
            "type": "array"
          },
          "measured_at": {
            "format": "date-time",
            "type": "string"
          },
          "scope": {
            "type": "string"
          },
          "sources": {
            "items": {
              "$ref": "#/components/schemas/CoverageSource"
            },
            "type": "array"
          }
        },
        "required": [
          "sources",
          "fixtures",
          "competitions",
          "measured_at",
          "scope"
        ],
        "type": "object"
      },
      "CreateKey": {
        "additionalProperties": false,
        "properties": {
          "expires_at": {
            "format": "date-time",
            "type": "string"
          },
          "name": {
            "type": "string"
          }
        },
        "required": [
          "name"
        ],
        "type": "object"
      },
      "Daily": {
        "additionalProperties": false,
        "properties": {
          "credits": {
            "type": "integer"
          },
          "date": {
            "type": "string"
          },
          "errors": {
            "type": "integer"
          },
          "requests": {
            "type": "integer"
          }
        },
        "required": [
          "date",
          "requests",
          "credits",
          "errors"
        ],
        "type": "object"
      },
      "Decimal": {
        "pattern": "^(0|[1-9][0-9]{0,15})\\.[0-9]{8}$",
        "type": "string"
      },
      "Entitlements": {
        "additionalProperties": false,
        "properties": {
          "families": {
            "items": {
              "$ref": "#/components/schemas/Family"
            },
            "type": "array"
          },
          "features": {
            "items": {
              "type": "string"
            },
            "type": "array"
          },
          "max_page_size": {
            "type": "integer"
          },
          "namespaces": {
            "items": {
              "type": "string"
            },
            "type": "array"
          },
          "public_distribution": {
            "type": "boolean"
          },
          "sources": {
            "items": {
              "$ref": "#/components/schemas/ID"
            },
            "type": "array"
          },
          "sports": {
            "items": {
              "$ref": "#/components/schemas/ID"
            },
            "type": "array"
          }
        },
        "required": [
          "namespaces",
          "sources",
          "sports",
          "families",
          "features",
          "max_page_size",
          "public_distribution"
        ],
        "type": "object"
      },
      "EntitlementsPage": {
        "additionalProperties": false,
        "properties": {
          "data": {
            "items": {
              "$ref": "#/components/schemas/Entitlements"
            },
            "type": "array"
          },
          "meta": {
            "$ref": "#/components/schemas/Meta"
          },
          "missing": {
            "items": {
              "$ref": "#/components/schemas/Missing"
            },
            "type": "array"
          }
        },
        "required": [
          "data",
          "missing",
          "meta"
        ],
        "type": "object"
      },
      "FairInfo": {
        "additionalProperties": false,
        "properties": {
          "recomputed": {
            "type": "boolean"
          },
          "result": {
            "$ref": "#/components/schemas/FairResult"
          }
        },
        "required": [
          "result",
          "recomputed"
        ],
        "type": "object"
      },
      "FairLatest": {
        "additionalProperties": false,
        "properties": {
          "event_id": {
            "type": "string"
          },
          "result": {
            "$ref": "#/components/schemas/FairResult"
          },
          "sequence": {
            "type": "integer"
          }
        },
        "required": [
          "event_id",
          "sequence",
          "result"
        ],
        "type": "object"
      },
      "FairMarket": {
        "additionalProperties": false,
        "properties": {
          "family": {
            "$ref": "#/components/schemas/Family"
          },
          "fixture_id": {
            "$ref": "#/components/schemas/ID"
          },
          "line_quarters": {
            "type": "integer"
          },
          "period": {
            "$ref": "#/components/schemas/Period"
          },
          "settlement_rule": {
            "type": "string"
          }
        },
        "required": [
          "fixture_id",
          "family",
          "period",
          "settlement_rule"
        ],
        "type": "object"
      },
      "FairOffer": {
        "additionalProperties": false,
        "properties": {
          "native_offer": {
            "type": "string"
          },
          "reasons": {
            "items": {
              "type": "string"
            },
            "type": "array"
          }
        },
        "required": [
          "native_offer",
          "reasons"
        ],
        "type": "object"
      },
      "FairPage": {
        "additionalProperties": false,
        "properties": {
          "data": {
            "items": {
              "$ref": "#/components/schemas/FairInfo"
            },
            "type": "array"
          },
          "meta": {
            "$ref": "#/components/schemas/Meta"
          },
          "missing": {
            "items": {
              "$ref": "#/components/schemas/Missing"
            },
            "type": "array"
          }
        },
        "required": [
          "data",
          "missing",
          "meta"
        ],
        "type": "object"
      },
      "FairProbability": {
        "additionalProperties": false,
        "properties": {
          "code": {
            "type": "string"
          },
          "decimal_odds": {
            "$ref": "#/components/schemas/Decimal"
          },
          "probability": {
            "$ref": "#/components/schemas/Decimal"
          }
        },
        "required": [
          "code",
          "probability",
          "decimal_odds"
        ],
        "type": "object"
      },
      "FairQuoteRef": {
        "additionalProperties": false,
        "properties": {
          "latest_revision": {
            "type": "integer"
          },
          "mapping_revision": {
            "type": "integer"
          },
          "mapping_swapped": {
            "type": "boolean"
          },
          "market_id": {
            "$ref": "#/components/schemas/ID"
          },
          "native_settlement_rule": {
            "type": "string"
          },
          "price": {
            "$ref": "#/components/schemas/LatestPrice"
          },
          "source_swapped": {
            "type": "boolean"
          },
          "target_code": {
            "type": "string"
          }
        },
        "required": [
          "price",
          "latest_revision",
          "mapping_revision",
          "market_id",
          "target_code",
          "native_settlement_rule",
          "mapping_swapped",
          "source_swapped"
        ],
        "type": "object"
      },
      "FairResult": {
        "additionalProperties": false,
        "properties": {
          "evaluated_at": {
            "format": "date-time",
            "type": "string"
          },
          "independent_groups": {
            "type": "integer"
          },
          "market": {
            "$ref": "#/components/schemas/FairMarket"
          },
          "max_confirmation_skew_seconds": {
            "type": "integer"
          },
          "method": {
            "enum": [
              "multiplicative",
              "power"
            ],
            "type": "string"
          },
          "min_independent_groups": {
            "type": "integer"
          },
          "min_sharp_groups": {
            "type": "integer"
          },
          "missing": {
            "items": {
              "type": "string"
            },
            "type": "array"
          },
          "policy_id": {
            "type": "string"
          },
          "policy_sha256": {
            "type": "string"
          },
          "probabilities": {
            "items": {
              "$ref": "#/components/schemas/FairProbability"
            },
            "type": "array"
          },
          "sharp_groups": {
            "type": "integer"
          },
          "sources": {
            "items": {
              "$ref": "#/components/schemas/FairSource"
            },
            "type": "array"
          },
          "status": {
            "enum": [
              "available",
              "insufficient_reference"
            ],
            "type": "string"
          },
          "valid_until": {
            "format": "date-time",
            "type": "string"
          },
          "version": {
            "type": "string"
          }
        },
        "required": [
          "version",
          "evaluated_at",
          "market",
          "method",
          "policy_id",
          "policy_sha256",
          "status",
          "missing",
          "independent_groups",
          "sharp_groups",
          "min_independent_groups",
          "min_sharp_groups",
          "max_confirmation_skew_seconds",
          "sources"
        ],
        "type": "object"
      },
      "FairSource": {
        "additionalProperties": false,
        "properties": {
          "configured_weight": {
            "$ref": "#/components/schemas/Decimal"
          },
          "currency": {
            "type": "string"
          },
          "effective_weight": {
            "$ref": "#/components/schemas/Decimal"
          },
          "feed_group_id": {
            "$ref": "#/components/schemas/ID"
          },
          "max_age_seconds": {
            "type": "integer"
          },
          "max_probability_spread": {
            "$ref": "#/components/schemas/Decimal"
          },
          "min_size": {
            "$ref": "#/components/schemas/Decimal"
          },
          "offers": {
            "items": {
              "$ref": "#/components/schemas/FairOffer"
            },
            "type": "array"
          },
          "power_exponent": {
            "$ref": "#/components/schemas/Decimal"
          },
          "probabilities": {
            "items": {
              "$ref": "#/components/schemas/FairProbability"
            },
            "type": "array"
          },
          "quotes": {
            "items": {
              "$ref": "#/components/schemas/FairQuoteRef"
            },
            "type": "array"
          },
          "reasons": {
            "items": {
              "type": "string"
            },
            "type": "array"
          },
          "region": {
            "type": "string"
          },
          "selected": {
            "type": "boolean"
          },
          "selected_offer": {
            "type": "string"
          },
          "sharp": {
            "type": "boolean"
          },
          "size_unit": {
            "type": "string"
          },
          "source_id": {
            "$ref": "#/components/schemas/ID"
          }
        },
        "required": [
          "source_id",
          "region",
          "reasons",
          "offers",
          "quotes",
          "selected",
          "sharp",
          "max_age_seconds",
          "min_size",
          "max_probability_spread"
        ],
        "type": "object"
      },
      "Family": {
        "enum": [
          "1x2",
          "total",
          "asian_handicap"
        ],
        "type": "string"
      },
      "FeedGroup": {
        "additionalProperties": false,
        "properties": {
          "id": {
            "$ref": "#/components/schemas/ID"
          },
          "name": {
            "minLength": 1,
            "type": "string"
          },
          "slug": {
            "minLength": 1,
            "type": "string"
          }
        },
        "required": [
          "id",
          "slug",
          "name"
        ],
        "type": "object"
      },
      "Fixture": {
        "additionalProperties": false,
        "properties": {
          "away_id": {
            "$ref": "#/components/schemas/ID"
          },
          "competition_id": {
            "$ref": "#/components/schemas/ID"
          },
          "external_ids": {
            "additionalProperties": {
              "type": "string"
            },
            "type": "object"
          },
          "home_id": {
            "$ref": "#/components/schemas/ID"
          },
          "id": {
            "$ref": "#/components/schemas/ID"
          },
          "previous_fixture_id": {
            "$ref": "#/components/schemas/ID"
          },
          "reissued_fixture_id": {
            "$ref": "#/components/schemas/ID"
          },
          "sport_id": {
            "$ref": "#/components/schemas/ID"
          },
          "start_ts": {
            "format": "date-time",
            "type": "string"
          },
          "status": {
            "enum": [
              "scheduled",
              "live",
              "ended",
              "cancelled"
            ],
            "type": "string"
          }
        },
        "required": [
          "id",
          "sport_id",
          "competition_id",
          "home_id",
          "away_id",
          "start_ts",
          "status"
        ],
        "type": "object"
      },
      "FixtureInfo": {
        "additionalProperties": false,
        "properties": {
          "away": {
            "$ref": "#/components/schemas/Participant"
          },
          "bindings": {
            "items": {
              "$ref": "#/components/schemas/Binding"
            },
            "type": "array"
          },
          "fixture": {
            "$ref": "#/components/schemas/Fixture"
          },
          "home": {
            "$ref": "#/components/schemas/Participant"
          },
          "identity_scope": {
            "enum": [
              "reviewed_group",
              "source_local"
            ],
            "type": "string"
          }
        },
        "required": [
          "fixture",
          "home",
          "away",
          "identity_scope",
          "bindings"
        ],
        "type": "object"
      },
      "FixturesPage": {
        "additionalProperties": false,
        "properties": {
          "data": {
            "items": {
              "$ref": "#/components/schemas/FixtureInfo"
            },
            "type": "array"
          },
          "meta": {
            "$ref": "#/components/schemas/Meta"
          },
          "missing": {
            "items": {
              "$ref": "#/components/schemas/Missing"
            },
            "type": "array"
          }
        },
        "required": [
          "data",
          "missing",
          "meta"
        ],
        "type": "object"
      },
      "HistoryBinding": {
        "additionalProperties": false,
        "properties": {
          "freshness_limit_seconds": {
            "type": "integer"
          },
          "known": {
            "type": "boolean"
          },
          "native_fixture_id": {
            "$ref": "#/components/schemas/ID"
          },
          "source_id": {
            "$ref": "#/components/schemas/ID"
          },
          "source_region": {
            "type": "string"
          },
          "sport_id": {
            "$ref": "#/components/schemas/ID"
          }
        },
        "required": [
          "source_id",
          "source_region",
          "native_fixture_id",
          "known",
          "freshness_limit_seconds"
        ],
        "type": "object"
      },
      "HistoryConfirmation": {
        "additionalProperties": false,
        "properties": {
          "capture_id": {
            "type": "string"
          },
          "capture_seq": {
            "type": "string"
          },
          "confirmed_ts": {
            "format": "date-time",
            "type": "string"
          },
          "recorded_fixture_status": {
            "type": "string"
          },
          "recorded_scheduled_start": {
            "format": "date-time",
            "type": "string"
          }
        },
        "required": [
          "capture_id",
          "capture_seq",
          "confirmed_ts",
          "recorded_scheduled_start",
          "recorded_fixture_status"
        ],
        "type": "object"
      },
      "HistoryCoverage": {
        "additionalProperties": false,
        "properties": {
          "binding": {
            "$ref": "#/components/schemas/HistoryBinding"
          },
          "first_confirmation": {
            "format": "date-time",
            "type": "string"
          },
          "first_tick": {
            "format": "date-time",
            "type": "string"
          },
          "gaps": {
            "items": {
              "type": "string"
            },
            "type": "array"
          },
          "last_confirmation": {
            "format": "date-time",
            "type": "string"
          },
          "last_tick": {
            "format": "date-time",
            "type": "string"
          },
          "max_confirmation_gap_seconds": {
            "type": "number"
          },
          "recorded_confirmations": {
            "type": "integer"
          },
          "retained_ticks": {
            "type": "integer"
          },
          "source_pending_captures": {
            "type": "integer"
          },
          "source_quarantined_captures": {
            "type": "integer"
          },
          "status": {
            "type": "string"
          }
        },
        "required": [
          "binding",
          "status",
          "retained_ticks",
          "recorded_confirmations",
          "source_pending_captures",
          "source_quarantined_captures",
          "gaps"
        ],
        "type": "object"
      },
      "HistoryMetadata": {
        "additionalProperties": false,
        "properties": {
          "canonical_sink_verified": {
            "type": "boolean"
          },
          "capture_high_seq": {
            "type": "string"
          },
          "closing_policy": {
            "type": "string"
          },
          "confirmation_policy": {
            "type": "string"
          },
          "coverage": {
            "items": {
              "$ref": "#/components/schemas/HistoryCoverage"
            },
            "type": "array"
          },
          "historical_only": {
            "type": "boolean"
          },
          "history_high_seq": {
            "type": "string"
          },
          "identity_scope": {
            "type": "string"
          },
          "namespace": {
            "type": "string"
          },
          "opening_policy": {
            "type": "string"
          },
          "query": {
            "$ref": "#/components/schemas/HistoryQuery"
          },
          "timeline": {
            "type": "string"
          },
          "version": {
            "type": "string"
          }
        },
        "required": [
          "namespace",
          "version",
          "identity_scope",
          "timeline",
          "query",
          "coverage",
          "history_high_seq",
          "capture_high_seq",
          "confirmation_policy",
          "closing_policy",
          "opening_policy",
          "historical_only",
          "canonical_sink_verified"
        ],
        "type": "object"
      },
      "HistoryPage": {
        "additionalProperties": false,
        "properties": {
          "data": {
            "items": {
              "$ref": "#/components/schemas/HistoryRecord"
            },
            "type": "array"
          },
          "history": {
            "$ref": "#/components/schemas/HistoryMetadata"
          },
          "meta": {
            "$ref": "#/components/schemas/Meta"
          },
          "missing": {
            "items": {
              "$ref": "#/components/schemas/Missing"
            },
            "type": "array"
          }
        },
        "required": [
          "data",
          "missing",
          "meta",
          "history"
        ],
        "type": "object"
      },
      "HistoryQuery": {
        "additionalProperties": false,
        "properties": {
          "as_of": {
            "format": "date-time",
            "type": "string"
          },
          "books": {
            "items": {
              "$ref": "#/components/schemas/ID"
            },
            "type": "array"
          },
          "families": {
            "items": {
              "$ref": "#/components/schemas/Family"
            },
            "type": "array"
          },
          "from": {
            "format": "date-time",
            "type": "string"
          },
          "kind": {
            "type": "string"
          },
          "native_fixture_ids": {
            "items": {
              "$ref": "#/components/schemas/ID"
            },
            "type": "array"
          },
          "scheduled_start": {
            "format": "date-time",
            "type": "string"
          },
          "until": {
            "format": "date-time",
            "type": "string"
          }
        },
        "required": [
          "kind",
          "books",
          "native_fixture_ids",
          "families"
        ],
        "type": "object"
      },
      "HistoryRecord": {
        "additionalProperties": false,
        "properties": {
          "confirmation": {
            "$ref": "#/components/schemas/HistoryConfirmation"
          },
          "cutoff": {
            "format": "date-time",
            "type": "string"
          },
          "ingest_seq": {
            "type": "string"
          },
          "kind": {
            "enum": [
              "tick",
              "snapshot",
              "opening",
              "closing"
            ],
            "type": "string"
          },
          "native_fixture_id": {
            "$ref": "#/components/schemas/ID"
          },
          "observation": {
            "$ref": "#/components/schemas/PriceObservation"
          },
          "quote_key": {
            "type": "string"
          },
          "reason": {
            "type": "string"
          },
          "source_id": {
            "$ref": "#/components/schemas/ID"
          },
          "status": {
            "enum": [
              "recorded",
              "available",
              "missing",
              "not_final"
            ],
            "type": "string"
          }
        },
        "required": [
          "kind",
          "source_id",
          "native_fixture_id",
          "quote_key",
          "status",
          "reason"
        ],
        "type": "object"
      },
      "ID": {
        "maximum": 9007199254740991,
        "minimum": 1,
        "type": "integer"
      },
      "InPlayCoverage": {
        "additionalProperties": false,
        "properties": {
          "families": {
            "items": {
              "$ref": "#/components/schemas/Family"
            },
            "type": "array"
          },
          "freshness_limit_seconds": {
            "type": "integer"
          },
          "mode": {
            "enum": [
              "pre_match_only",
              "local_test_only"
            ],
            "type": "string"
          },
          "reason": {
            "type": "string"
          }
        },
        "required": [
          "mode",
          "families",
          "freshness_limit_seconds",
          "reason"
        ],
        "type": "object"
      },
      "InPlayPolicy": {
        "additionalProperties": false,
        "properties": {
          "expires_at": {
            "format": "date-time",
            "type": "string"
          },
          "fixture_id": {
            "$ref": "#/components/schemas/ID"
          },
          "freshness_seconds": {
            "type": "integer"
          },
          "native_fixture_id": {
            "type": "string"
          },
          "native_offer_id": {
            "type": "string"
          },
          "provenance": {
            "type": "string"
          },
          "source_id": {
            "$ref": "#/components/schemas/ID"
          },
          "start_ts": {
            "format": "date-time",
            "type": "string"
          },
          "version": {
            "type": "string"
          }
        },
        "required": [
          "version",
          "source_id",
          "fixture_id",
          "native_fixture_id",
          "native_offer_id",
          "start_ts",
          "expires_at",
          "freshness_seconds",
          "provenance"
        ],
        "type": "object"
      },
      "InPlayState": {
        "additionalProperties": false,
        "properties": {
          "closed_ts": {
            "format": "date-time",
            "type": "string"
          },
          "connected": {
            "type": "boolean"
          },
          "last_capture_id": {
            "type": "string"
          },
          "last_seen_ts": {
            "format": "date-time",
            "type": "string"
          },
          "phase": {
            "enum": [
              "scheduled",
              "live",
              "ended"
            ],
            "type": "string"
          },
          "phase_ts": {
            "format": "date-time",
            "type": "string"
          },
          "policy": {
            "$ref": "#/components/schemas/InPlayPolicy"
          },
          "session_id": {
            "type": "string"
          },
          "session_started_ts": {
            "format": "date-time",
            "type": "string"
          },
          "snapshot_ready": {
            "type": "boolean"
          }
        },
        "required": [
          "policy",
          "session_id",
          "session_started_ts",
          "phase",
          "phase_ts",
          "connected",
          "snapshot_ready"
        ],
        "type": "object"
      },
      "InvalidParam": {
        "additionalProperties": false,
        "properties": {
          "name": {
            "type": "string"
          },
          "reason": {
            "type": "string"
          }
        },
        "required": [
          "name",
          "reason"
        ],
        "type": "object"
      },
      "Key": {
        "additionalProperties": false,
        "properties": {
          "created_at": {
            "format": "date-time",
            "type": "string"
          },
          "expires_at": {
            "format": "date-time",
            "type": "string"
          },
          "id": {
            "type": "string"
          },
          "name": {
            "type": "string"
          },
          "prefix": {
            "type": "string"
          },
          "replaces_id": {
            "type": "string"
          },
          "revoked_at": {
            "format": "date-time",
            "type": "string"
          }
        },
        "required": [
          "id",
          "name",
          "prefix",
          "created_at"
        ],
        "type": "object"
      },
      "KeyCreated": {
        "additionalProperties": false,
        "properties": {
          "key": {
            "$ref": "#/components/schemas/Key"
          },
          "secret": {
            "type": "string"
          },
          "shown_once": {
            "type": "boolean"
          }
        },
        "required": [
          "key",
          "secret",
          "shown_once"
        ],
        "type": "object"
      },
      "KeyCreatedPage": {
        "additionalProperties": false,
        "properties": {
          "data": {
            "items": {
              "$ref": "#/components/schemas/KeyCreated"
            },
            "type": "array"
          },
          "meta": {
            "$ref": "#/components/schemas/Meta"
          },
          "missing": {
            "items": {
              "$ref": "#/components/schemas/Missing"
            },
            "type": "array"
          }
        },
        "required": [
          "data",
          "missing",
          "meta"
        ],
        "type": "object"
      },
      "KeysPage": {
        "additionalProperties": false,
        "properties": {
          "data": {
            "items": {
              "$ref": "#/components/schemas/Key"
            },
            "type": "array"
          },
          "meta": {
            "$ref": "#/components/schemas/Meta"
          },
          "missing": {
            "items": {
              "$ref": "#/components/schemas/Missing"
            },
            "type": "array"
          }
        },
        "required": [
          "data",
          "missing",
          "meta"
        ],
        "type": "object"
      },
      "LatestPrice": {
        "additionalProperties": false,
        "properties": {
          "confirmed_ts": {
            "format": "date-time",
            "type": "string"
          },
          "observation": {
            "$ref": "#/components/schemas/PriceObservation"
          }
        },
        "required": [
          "observation",
          "confirmed_ts"
        ],
        "type": "object"
      },
      "MappingsPage": {
        "additionalProperties": false,
        "properties": {
          "data": {
            "items": {
              "$ref": "#/components/schemas/Binding"
            },
            "type": "array"
          },
          "meta": {
            "$ref": "#/components/schemas/Meta"
          },
          "missing": {
            "items": {
              "$ref": "#/components/schemas/Missing"
            },
            "type": "array"
          }
        },
        "required": [
          "data",
          "missing",
          "meta"
        ],
        "type": "object"
      },
      "Market": {
        "additionalProperties": false,
        "properties": {
          "family": {
            "$ref": "#/components/schemas/Family"
          },
          "id": {
            "$ref": "#/components/schemas/ID"
          },
          "line_quarters": {
            "type": "integer"
          },
          "name": {
            "minLength": 1,
            "type": "string"
          },
          "participant_id": {
            "$ref": "#/components/schemas/ID"
          },
          "period": {
            "$ref": "#/components/schemas/Period"
          },
          "settlement_rule": {
            "minLength": 1,
            "type": "string"
          },
          "sport_id": {
            "$ref": "#/components/schemas/ID"
          }
        },
        "required": [
          "id",
          "sport_id",
          "family",
          "period",
          "settlement_rule",
          "name"
        ],
        "type": "object"
      },
      "MarketInfo": {
        "additionalProperties": false,
        "properties": {
          "market": {
            "$ref": "#/components/schemas/Market"
          },
          "outcomes": {
            "items": {
              "$ref": "#/components/schemas/Outcome"
            },
            "type": "array"
          }
        },
        "required": [
          "market",
          "outcomes"
        ],
        "type": "object"
      },
      "MarketsPage": {
        "additionalProperties": false,
        "properties": {
          "data": {
            "items": {
              "$ref": "#/components/schemas/MarketInfo"
            },
            "type": "array"
          },
          "meta": {
            "$ref": "#/components/schemas/Meta"
          },
          "missing": {
            "items": {
              "$ref": "#/components/schemas/Missing"
            },
            "type": "array"
          }
        },
        "required": [
          "data",
          "missing",
          "meta"
        ],
        "type": "object"
      },
      "Member": {
        "additionalProperties": false,
        "properties": {
          "role": {
            "enum": [
              "owner",
              "admin",
              "viewer"
            ],
            "type": "string"
          },
          "user_id": {
            "type": "string"
          }
        },
        "required": [
          "user_id",
          "role"
        ],
        "type": "object"
      },
      "MembersPage": {
        "additionalProperties": false,
        "properties": {
          "data": {
            "items": {
              "$ref": "#/components/schemas/Member"
            },
            "type": "array"
          },
          "meta": {
            "$ref": "#/components/schemas/Meta"
          },
          "missing": {
            "items": {
              "$ref": "#/components/schemas/Missing"
            },
            "type": "array"
          }
        },
        "required": [
          "data",
          "missing",
          "meta"
        ],
        "type": "object"
      },
      "Meta": {
        "additionalProperties": false,
        "properties": {
          "consistency": {
            "type": "string"
          },
          "count": {
            "type": "integer"
          },
          "namespace": {
            "type": "string"
          },
          "next_cursor": {
            "type": "string"
          },
          "request_id": {
            "type": "string"
          },
          "sent_ts": {
            "format": "date-time",
            "type": "string"
          },
          "snapshot_ts": {
            "format": "date-time",
            "type": "string"
          },
          "version": {
            "type": "string"
          }
        },
        "required": [
          "version",
          "request_id",
          "sent_ts",
          "snapshot_ts",
          "next_cursor",
          "count",
          "consistency"
        ],
        "type": "object"
      },
      "Missing": {
        "additionalProperties": false,
        "properties": {
          "detail": {
            "type": "string"
          },
          "family": {
            "$ref": "#/components/schemas/Family"
          },
          "fixture_id": {
            "$ref": "#/components/schemas/ID"
          },
          "quote_key": {
            "type": "string"
          },
          "reason": {
            "type": "string"
          },
          "source_id": {
            "$ref": "#/components/schemas/ID"
          }
        },
        "required": [
          "reason",
          "detail"
        ],
        "type": "object"
      },
      "NamespaceFixture": {
        "additionalProperties": false,
        "properties": {
          "fixture": {
            "$ref": "#/components/schemas/FixtureInfo"
          },
          "namespace": {
            "type": "string"
          }
        },
        "required": [
          "namespace",
          "fixture"
        ],
        "type": "object"
      },
      "NativeUnit": {
        "enum": [
          "decimal_odds",
          "probability"
        ],
        "type": "string"
      },
      "Notice": {
        "additionalProperties": false,
        "properties": {
          "created_at": {
            "format": "date-time",
            "type": "string"
          },
          "cycle_id": {
            "type": "string"
          },
          "delivery": {
            "enum": [
              "local_only"
            ],
            "type": "string"
          },
          "id": {
            "type": "string"
          },
          "limit": {
            "type": "integer"
          },
          "threshold": {
            "type": "integer"
          },
          "used": {
            "type": "integer"
          }
        },
        "required": [
          "id",
          "cycle_id",
          "threshold",
          "used",
          "limit",
          "created_at",
          "delivery"
        ],
        "type": "object"
      },
      "OddsPage": {
        "additionalProperties": false,
        "properties": {
          "data": {
            "items": {
              "$ref": "#/components/schemas/Quote"
            },
            "type": "array"
          },
          "meta": {
            "$ref": "#/components/schemas/Meta"
          },
          "missing": {
            "items": {
              "$ref": "#/components/schemas/Missing"
            },
            "type": "array"
          }
        },
        "required": [
          "data",
          "missing",
          "meta"
        ],
        "type": "object"
      },
      "OperationUsage": {
        "additionalProperties": false,
        "properties": {
          "credits": {
            "type": "integer"
          },
          "errors": {
            "type": "integer"
          },
          "operation": {
            "type": "string"
          },
          "requests": {
            "type": "integer"
          }
        },
        "required": [
          "operation",
          "requests",
          "credits",
          "errors"
        ],
        "type": "object"
      },
      "Outcome": {
        "additionalProperties": false,
        "properties": {
          "code": {
            "enum": [
              "home",
              "draw",
              "away",
              "over",
              "under"
            ],
            "type": "string"
          },
          "id": {
            "$ref": "#/components/schemas/ID"
          },
          "market_id": {
            "$ref": "#/components/schemas/ID"
          },
          "name": {
            "minLength": 1,
            "type": "string"
          }
        },
        "required": [
          "id",
          "market_id",
          "code",
          "name"
        ],
        "type": "object"
      },
      "Participant": {
        "additionalProperties": false,
        "properties": {
          "external_ids": {
            "additionalProperties": {
              "type": "string"
            },
            "type": "object"
          },
          "id": {
            "$ref": "#/components/schemas/ID"
          },
          "kind": {
            "enum": [
              "team",
              "player"
            ],
            "type": "string"
          },
          "name": {
            "minLength": 1,
            "type": "string"
          },
          "sport_id": {
            "$ref": "#/components/schemas/ID"
          }
        },
        "required": [
          "id",
          "sport_id",
          "name",
          "kind"
        ],
        "type": "object"
      },
      "Period": {
        "enum": [
          "full_time",
          "first_half"
        ],
        "type": "string"
      },
      "PriceDelivery": {
        "additionalProperties": false,
        "properties": {
          "price": {
            "$ref": "#/components/schemas/LatestPrice"
          },
          "sent_ts": {
            "format": "date-time",
            "type": "string"
          }
        },
        "required": [
          "price",
          "sent_ts"
        ],
        "type": "object"
      },
      "PriceKey": {
        "additionalProperties": false,
        "properties": {
          "depth": {
            "maximum": 3,
            "type": "integer"
          },
          "fixture_id": {
            "$ref": "#/components/schemas/ID"
          },
          "market_id": {
            "$ref": "#/components/schemas/ID"
          },
          "outcome_id": {
            "$ref": "#/components/schemas/ID"
          },
          "side": {
            "$ref": "#/components/schemas/Side"
          },
          "source_fixture_id": {
            "minLength": 1,
            "type": "string"
          },
          "source_id": {
            "$ref": "#/components/schemas/ID"
          },
          "source_market_id": {
            "minLength": 1,
            "type": "string"
          },
          "source_outcome_id": {
            "minLength": 1,
            "type": "string"
          }
        },
        "required": [
          "source_id",
          "fixture_id",
          "market_id",
          "outcome_id",
          "source_fixture_id",
          "source_market_id",
          "source_outcome_id",
          "side",
          "depth"
        ],
        "type": "object"
      },
      "PriceObservation": {
        "additionalProperties": false,
        "properties": {
          "event_id": {
            "format": "uuid",
            "type": "string"
          },
          "key": {
            "$ref": "#/components/schemas/PriceKey"
          },
          "raw_payload_id": {
            "format": "uuid",
            "type": "string"
          },
          "seen_ts": {
            "format": "date-time",
            "type": "string"
          },
          "source_sequence": {
            "type": "string"
          },
          "source_ts": {
            "format": "date-time",
            "type": "string"
          },
          "value": {
            "$ref": "#/components/schemas/PriceValue"
          }
        },
        "required": [
          "event_id",
          "raw_payload_id",
          "key",
          "value",
          "seen_ts"
        ],
        "type": "object"
      },
      "PriceState": {
        "enum": [
          "active",
          "suspended",
          "unavailable"
        ],
        "type": "string"
      },
      "PriceValue": {
        "additionalProperties": false,
        "properties": {
          "available_size": {
            "$ref": "#/components/schemas/Decimal"
          },
          "commission_rate": {
            "$ref": "#/components/schemas/Decimal"
          },
          "currency": {
            "pattern": "^[A-Z]{3}$",
            "type": "string"
          },
          "decimal_odds": {
            "$ref": "#/components/schemas/Decimal"
          },
          "fee_rate": {
            "$ref": "#/components/schemas/Decimal"
          },
          "main_line": {
            "type": "boolean"
          },
          "native_unit": {
            "$ref": "#/components/schemas/NativeUnit"
          },
          "native_value": {
            "$ref": "#/components/schemas/Decimal"
          },
          "size_unit": {
            "enum": [
              "currency",
              "contracts"
            ],
            "type": "string"
          },
          "state": {
            "$ref": "#/components/schemas/PriceState"
          }
        },
        "required": [
          "state",
          "native_unit"
        ],
        "type": "object"
      },
      "Problem": {
        "additionalProperties": false,
        "properties": {
          "code": {
            "type": "string"
          },
          "detail": {
            "type": "string"
          },
          "invalid_params": {
            "items": {
              "$ref": "#/components/schemas/InvalidParam"
            },
            "type": "array"
          },
          "missing": {
            "items": {
              "$ref": "#/components/schemas/Missing"
            },
            "type": "array"
          },
          "request_id": {
            "type": "string"
          },
          "status": {
            "type": "integer"
          },
          "title": {
            "type": "string"
          },
          "type": {
            "type": "string"
          }
        },
        "required": [
          "type",
          "title",
          "status",
          "detail",
          "code",
          "request_id",
          "invalid_params",
          "missing"
        ],
        "type": "object"
      },
      "Quote": {
        "additionalProperties": false,
        "properties": {
          "age_seconds": {
            "type": "number"
          },
          "delivery": {
            "$ref": "#/components/schemas/PriceDelivery"
          },
          "display_format": {
            "enum": [
              "decimal",
              "american"
            ],
            "type": "string"
          },
          "display_odds": {
            "anyOf": [
              {
                "oneOf": [
                  {
                    "type": "string"
                  },
                  {
                    "type": "null"
                  }
                ]
              },
              {
                "type": "null"
              }
            ]
          },
          "fixture_id": {
            "$ref": "#/components/schemas/ID"
          },
          "fixture_phase": {
            "enum": [
              "scheduled",
              "live",
              "ended",
              "cancelled"
            ],
            "type": "string"
          },
          "freshness_limit_seconds": {
            "type": "integer"
          },
          "identity_scope": {
            "enum": [
              "reviewed_group",
              "source_local"
            ],
            "type": "string"
          },
          "inplay": {
            "$ref": "#/components/schemas/InPlayCoverage"
          },
          "mapping_revision": {
            "type": "integer"
          },
          "mapping_swapped": {
            "type": "boolean"
          },
          "market": {
            "$ref": "#/components/schemas/Market"
          },
          "outcome": {
            "$ref": "#/components/schemas/Outcome"
          },
          "quote_key": {
            "type": "string"
          },
          "reason": {
            "type": "string"
          },
          "source_swapped": {
            "type": "boolean"
          },
          "source_ts": {
            "anyOf": [
              {
                "oneOf": [
                  {
                    "format": "date-time",
                    "type": "string"
                  },
                  {
                    "type": "null"
                  }
                ]
              },
              {
                "type": "null"
              }
            ]
          },
          "status": {
            "enum": [
              "active",
              "stale",
              "suspended",
              "unavailable"
            ],
            "type": "string"
          },
          "target_code": {
            "type": "string"
          },
          "target_line_quarters": {
            "anyOf": [
              {
                "oneOf": [
                  {
                    "type": "integer"
                  },
                  {
                    "type": "null"
                  }
                ]
              },
              {
                "type": "null"
              }
            ]
          },
          "terms": {
            "$ref": "#/components/schemas/Terms"
          }
        },
        "required": [
          "fixture_phase",
          "quote_key",
          "fixture_id",
          "identity_scope",
          "market",
          "outcome",
          "target_code",
          "target_line_quarters",
          "mapping_revision",
          "source_swapped",
          "mapping_swapped",
          "delivery",
          "source_ts",
          "status",
          "age_seconds",
          "freshness_limit_seconds",
          "display_format",
          "display_odds",
          "terms"
        ],
        "type": "object"
      },
      "RawCapture": {
        "additionalProperties": false,
        "properties": {
          "capture_id": {
            "format": "uuid",
            "type": "string"
          },
          "collector_session": {
            "format": "uuid",
            "type": "string"
          },
          "object_key": {
            "minLength": 1,
            "type": "string"
          },
          "seen_ts": {
            "format": "date-time",
            "type": "string"
          },
          "sha256": {
            "pattern": "^[0-9a-f]{64}$",
            "type": "string"
          },
          "source_id": {
            "$ref": "#/components/schemas/ID"
          }
        },
        "required": [
          "capture_id",
          "source_id",
          "seen_ts",
          "object_key",
          "sha256"
        ],
        "type": "object"
      },
      "Request": {
        "additionalProperties": false,
        "properties": {
          "account_id": {
            "type": "string"
          },
          "created_at": {
            "format": "date-time",
            "type": "string"
          },
          "credits": {
            "type": "integer"
          },
          "cycle_id": {
            "type": "string"
          },
          "expires_at": {
            "format": "date-time",
            "type": "string"
          },
          "finished_at": {
            "format": "date-time",
            "type": "string"
          },
          "http_status": {
            "type": "integer"
          },
          "key_id": {
            "type": "string"
          },
          "namespace": {
            "type": "string"
          },
          "operation": {
            "type": "string"
          },
          "reason": {
            "type": "string"
          },
          "request_id": {
            "type": "string"
          },
          "response_bytes": {
            "type": "integer"
          },
          "state": {
            "enum": [
              "held",
              "charged",
              "free"
            ],
            "type": "string"
          }
        },
        "required": [
          "request_id",
          "account_id",
          "operation",
          "namespace",
          "state",
          "reason",
          "http_status",
          "response_bytes",
          "credits",
          "created_at"
        ],
        "type": "object"
      },
      "RoleChange": {
        "additionalProperties": false,
        "properties": {
          "role": {
            "type": "string"
          }
        },
        "required": [
          "role"
        ],
        "type": "object"
      },
      "Side": {
        "enum": [
          "quote",
          "back",
          "lay",
          "bid",
          "ask"
        ],
        "type": "string"
      },
      "Source": {
        "additionalProperties": false,
        "properties": {
          "brand_id": {
            "$ref": "#/components/schemas/ID"
          },
          "enabled": {
            "type": "boolean"
          },
          "feed_group_id": {
            "$ref": "#/components/schemas/ID"
          },
          "id": {
            "$ref": "#/components/schemas/ID"
          },
          "kind": {
            "$ref": "#/components/schemas/SourceKind"
          },
          "region": {
            "minLength": 1,
            "type": "string"
          },
          "slug": {
            "minLength": 1,
            "type": "string"
          }
        },
        "required": [
          "id",
          "slug",
          "brand_id",
          "region",
          "kind",
          "enabled"
        ],
        "type": "object"
      },
      "SourceInfo": {
        "additionalProperties": false,
        "properties": {
          "brand": {
            "$ref": "#/components/schemas/Brand"
          },
          "collection": {
            "enum": [
              "working",
              "blocked",
              "access_only",
              "not_integrated"
            ],
            "type": "string"
          },
          "entitled": {
            "type": "boolean"
          },
          "families": {
            "items": {
              "$ref": "#/components/schemas/Family"
            },
            "type": "array"
          },
          "inplay": {
            "$ref": "#/components/schemas/InPlayCoverage"
          },
          "rights": {
            "type": "string"
          },
          "source": {
            "$ref": "#/components/schemas/Source"
          }
        },
        "required": [
          "inplay",
          "source",
          "brand",
          "collection",
          "families",
          "rights",
          "entitled"
        ],
        "type": "object"
      },
      "SourceKind": {
        "enum": [
          "sportsbook",
          "exchange",
          "prediction"
        ],
        "type": "string"
      },
      "SourcesPage": {
        "additionalProperties": false,
        "properties": {
          "data": {
            "items": {
              "$ref": "#/components/schemas/SourceInfo"
            },
            "type": "array"
          },
          "meta": {
            "$ref": "#/components/schemas/Meta"
          },
          "missing": {
            "items": {
              "$ref": "#/components/schemas/Missing"
            },
            "type": "array"
          }
        },
        "required": [
          "data",
          "missing",
          "meta"
        ],
        "type": "object"
      },
      "Sport": {
        "additionalProperties": false,
        "properties": {
          "id": {
            "$ref": "#/components/schemas/ID"
          },
          "name": {
            "minLength": 1,
            "type": "string"
          },
          "slug": {
            "minLength": 1,
            "type": "string"
          }
        },
        "required": [
          "id",
          "slug",
          "name"
        ],
        "type": "object"
      },
      "SportsPage": {
        "additionalProperties": false,
        "properties": {
          "data": {
            "items": {
              "$ref": "#/components/schemas/Sport"
            },
            "type": "array"
          },
          "meta": {
            "$ref": "#/components/schemas/Meta"
          },
          "missing": {
            "items": {
              "$ref": "#/components/schemas/Missing"
            },
            "type": "array"
          }
        },
        "required": [
          "data",
          "missing",
          "meta"
        ],
        "type": "object"
      },
      "Summary": {
        "additionalProperties": false,
        "properties": {
          "cycle_id": {
            "type": "string"
          },
          "cycle_kind": {
            "type": "string"
          },
          "limit": {
            "type": "integer"
          },
          "overage_budget": {
            "type": "integer"
          },
          "overage_enabled": {
            "type": "boolean"
          },
          "remaining": {
            "type": "integer"
          },
          "reserved": {
            "type": "integer"
          },
          "resets_at": {
            "format": "date-time",
            "type": "string"
          },
          "starts_at": {
            "format": "date-time",
            "type": "string"
          },
          "status": {
            "enum": [
              "unconfigured",
              "active",
              "exhausted"
            ],
            "type": "string"
          },
          "used": {
            "type": "integer"
          }
        },
        "required": [
          "status",
          "limit",
          "used",
          "reserved",
          "remaining",
          "overage_enabled",
          "overage_budget",
          "cycle_kind"
        ],
        "type": "object"
      },
      "TerminalBoard": {
        "additionalProperties": false,
        "properties": {
          "displayed_fixtures": {
            "type": "integer"
          },
          "missing": {
            "items": {
              "$ref": "#/components/schemas/Missing"
            },
            "type": "array"
          },
          "namespace": {
            "type": "string"
          },
          "next_cursor": {
            "type": "string"
          },
          "preferences_revision": {
            "type": "integer"
          },
          "product": {
            "type": "string"
          },
          "provenance": {
            "type": "string"
          },
          "rows": {
            "items": {
              "$ref": "#/components/schemas/TerminalRow"
            },
            "type": "array"
          },
          "server_now": {
            "format": "date-time",
            "type": "string"
          },
          "sources": {
            "items": {
              "$ref": "#/components/schemas/TerminalSource"
            },
            "type": "array"
          },
          "total_fixtures": {
            "type": "integer"
          }
        },
        "required": [
          "product",
          "namespace",
          "provenance",
          "preferences_revision",
          "server_now",
          "rows",
          "sources",
          "missing",
          "total_fixtures",
          "displayed_fixtures",
          "next_cursor"
        ],
        "type": "object"
      },
      "TerminalBoardInput": {
        "additionalProperties": false,
        "properties": {
          "cursor": {
            "type": "string"
          }
        },
        "type": "object"
      },
      "TerminalBoardPage": {
        "additionalProperties": false,
        "properties": {
          "data": {
            "items": {
              "$ref": "#/components/schemas/TerminalBoard"
            },
            "type": "array"
          },
          "meta": {
            "$ref": "#/components/schemas/Meta"
          },
          "missing": {
            "items": {
              "$ref": "#/components/schemas/Missing"
            },
            "type": "array"
          }
        },
        "required": [
          "data",
          "missing",
          "meta"
        ],
        "type": "object"
      },
      "TerminalCell": {
        "additionalProperties": false,
        "properties": {
          "best": {
            "type": "boolean"
          },
          "confirmed_ts": {
            "format": "date-time",
            "type": "string"
          },
          "decimal_odds": {
            "$ref": "#/components/schemas/Decimal"
          },
          "freshness_limit_seconds": {
            "type": "integer"
          },
          "key": {
            "$ref": "#/components/schemas/PriceKey"
          },
          "native_unit": {
            "$ref": "#/components/schemas/NativeUnit"
          },
          "native_value": {
            "$ref": "#/components/schemas/Decimal"
          },
          "quote_key": {
            "type": "string"
          },
          "reason": {
            "type": "string"
          },
          "seen_ts": {
            "format": "date-time",
            "type": "string"
          },
          "source_ts": {
            "format": "date-time",
            "type": "string"
          },
          "status": {
            "enum": [
              "active",
              "stale",
              "suspended",
              "unavailable"
            ],
            "type": "string"
          }
        },
        "required": [
          "quote_key",
          "key",
          "status",
          "reason",
          "native_unit",
          "seen_ts",
          "confirmed_ts",
          "freshness_limit_seconds",
          "best"
        ],
        "type": "object"
      },
      "TerminalChart": {
        "additionalProperties": false,
        "properties": {
          "metadata": {
            "$ref": "#/components/schemas/HistoryMetadata"
          },
          "points": {
            "items": {
              "$ref": "#/components/schemas/TerminalChartPoint"
            },
            "type": "array"
          },
          "product": {
            "type": "string"
          },
          "provenance": {
            "type": "string"
          },
          "quote_key": {
            "type": "string"
          },
          "server_now": {
            "format": "date-time",
            "type": "string"
          },
          "source": {
            "$ref": "#/components/schemas/Source"
          },
          "source_local_fixture_id": {
            "$ref": "#/components/schemas/ID"
          },
          "source_local_outcome_code": {
            "type": "string"
          }
        },
        "required": [
          "product",
          "provenance",
          "quote_key",
          "source",
          "source_local_fixture_id",
          "source_local_outcome_code",
          "server_now",
          "points",
          "metadata"
        ],
        "type": "object"
      },
      "TerminalChartInput": {
        "additionalProperties": false,
        "properties": {
          "quote_key": {
            "type": "string"
          },
          "window_hours": {
            "enum": [
              1,
              6,
              24
            ],
            "type": "integer"
          }
        },
        "required": [
          "quote_key",
          "window_hours"
        ],
        "type": "object"
      },
      "TerminalChartPage": {
        "additionalProperties": false,
        "properties": {
          "data": {
            "items": {
              "$ref": "#/components/schemas/TerminalChart"
            },
            "type": "array"
          },
          "meta": {
            "$ref": "#/components/schemas/Meta"
          },
          "missing": {
            "items": {
              "$ref": "#/components/schemas/Missing"
            },
            "type": "array"
          }
        },
        "required": [
          "data",
          "missing",
          "meta"
        ],
        "type": "object"
      },
      "TerminalChartPoint": {
        "additionalProperties": false,
        "properties": {
          "connect_previous": {
            "type": "boolean"
          },
          "decimal_odds": {
            "$ref": "#/components/schemas/Decimal"
          },
          "event_id": {
            "type": "string"
          },
          "ingest_seq": {
            "type": "string"
          },
          "native_unit": {
            "$ref": "#/components/schemas/NativeUnit"
          },
          "native_value": {
            "$ref": "#/components/schemas/Decimal"
          },
          "seen_ts": {
            "format": "date-time",
            "type": "string"
          },
          "state": {
            "$ref": "#/components/schemas/PriceState"
          }
        },
        "required": [
          "event_id",
          "ingest_seq",
          "seen_ts",
          "state",
          "native_unit",
          "connect_previous"
        ],
        "type": "object"
      },
      "TerminalContext": {
        "additionalProperties": false,
        "properties": {
          "account": {
            "$ref": "#/components/schemas/Account"
          },
          "blocked": {
            "type": "string"
          },
          "can_use": {
            "type": "boolean"
          },
          "competitions": {
            "items": {
              "$ref": "#/components/schemas/Competition"
            },
            "type": "array"
          },
          "preferences": {
            "$ref": "#/components/schemas/TerminalPreferences"
          },
          "product": {
            "type": "string"
          },
          "refresh_seconds": {
            "type": "integer"
          },
          "sources": {
            "items": {
              "$ref": "#/components/schemas/TerminalSource"
            },
            "type": "array"
          },
          "sports": {
            "items": {
              "$ref": "#/components/schemas/Sport"
            },
            "type": "array"
          }
        },
        "required": [
          "product",
          "account",
          "preferences",
          "sources",
          "sports",
          "competitions",
          "can_use",
          "blocked",
          "refresh_seconds"
        ],
        "type": "object"
      },
      "TerminalContextPage": {
        "additionalProperties": false,
        "properties": {
          "data": {
            "items": {
              "$ref": "#/components/schemas/TerminalContext"
            },
            "type": "array"
          },
          "meta": {
            "$ref": "#/components/schemas/Meta"
          },
          "missing": {
            "items": {
              "$ref": "#/components/schemas/Missing"
            },
            "type": "array"
          }
        },
        "required": [
          "data",
          "missing",
          "meta"
        ],
        "type": "object"
      },
      "TerminalPreferences": {
        "additionalProperties": false,
        "properties": {
          "revision": {
            "type": "integer"
          },
          "settings": {
            "$ref": "#/components/schemas/TerminalSettings"
          }
        },
        "required": [
          "revision",
          "settings"
        ],
        "type": "object"
      },
      "TerminalPreferencesInput": {
        "additionalProperties": false,
        "properties": {
          "expected_revision": {
            "type": "integer"
          },
          "settings": {
            "$ref": "#/components/schemas/TerminalSettings"
          }
        },
        "required": [
          "expected_revision",
          "settings"
        ],
        "type": "object"
      },
      "TerminalPreferencesPage": {
        "additionalProperties": false,
        "properties": {
          "data": {
            "items": {
              "$ref": "#/components/schemas/TerminalPreferences"
            },
            "type": "array"
          },
          "meta": {
            "$ref": "#/components/schemas/Meta"
          },
          "missing": {
            "items": {
              "$ref": "#/components/schemas/Missing"
            },
            "type": "array"
          }
        },
        "required": [
          "data",
          "missing",
          "meta"
        ],
        "type": "object"
      },
      "TerminalRow": {
        "additionalProperties": false,
        "properties": {
          "cells": {
            "items": {
              "$ref": "#/components/schemas/TerminalCell"
            },
            "type": "array"
          },
          "code": {
            "type": "string"
          },
          "family": {
            "$ref": "#/components/schemas/Family"
          },
          "fixture": {
            "$ref": "#/components/schemas/FixtureInfo"
          },
          "id": {
            "type": "string"
          },
          "identity_scope": {
            "type": "string"
          },
          "kind": {
            "$ref": "#/components/schemas/SourceKind"
          },
          "line_quarters": {
            "type": "integer"
          },
          "period": {
            "$ref": "#/components/schemas/Period"
          },
          "reference": {
            "$ref": "#/components/schemas/FairResult"
          },
          "reference_reason": {
            "type": "string"
          },
          "settlement_rule": {
            "type": "string"
          }
        },
        "required": [
          "id",
          "fixture",
          "identity_scope",
          "family",
          "period",
          "settlement_rule",
          "code",
          "kind",
          "cells",
          "reference_reason"
        ],
        "type": "object"
      },
      "TerminalSettings": {
        "additionalProperties": false,
        "properties": {
          "books": {
            "items": {
              "$ref": "#/components/schemas/ID"
            },
            "type": "array"
          },
          "competitions": {
            "items": {
              "$ref": "#/components/schemas/ID"
            },
            "type": "array"
          },
          "country": {
            "type": "string"
          },
          "family": {
            "$ref": "#/components/schemas/Family"
          },
          "line_quarters": {
            "type": "integer"
          },
          "namespace": {
            "type": "string"
          },
          "phase": {
            "enum": [
              "prematch",
              "live",
              "all"
            ],
            "type": "string"
          },
          "show_fair": {
            "type": "boolean"
          },
          "sport_id": {
            "$ref": "#/components/schemas/ID"
          },
          "state": {
            "type": "string"
          }
        },
        "required": [
          "country",
          "state",
          "namespace",
          "books",
          "sport_id",
          "competitions",
          "family",
          "phase",
          "show_fair"
        ],
        "type": "object"
      },
      "TerminalSource": {
        "additionalProperties": false,
        "properties": {
          "chart_allowed": {
            "type": "boolean"
          },
          "display_allowed": {
            "type": "boolean"
          },
          "fair_allowed": {
            "type": "boolean"
          },
          "info": {
            "$ref": "#/components/schemas/SourceInfo"
          },
          "namespace": {
            "type": "string"
          },
          "reason": {
            "type": "string"
          }
        },
        "required": [
          "namespace",
          "info",
          "display_allowed",
          "fair_allowed",
          "chart_allowed",
          "reason"
        ],
        "type": "object"
      },
      "Terms": {
        "additionalProperties": false,
        "properties": {
          "fee_model": {
            "enum": [
              "sportsbook_gross",
              "native_schedule_unreviewed",
              "unknown"
            ],
            "type": "string"
          },
          "fee_schedule": {
            "type": "object"
          },
          "fees_enabled": {
            "anyOf": [
              {
                "oneOf": [
                  {
                    "type": "boolean"
                  },
                  {
                    "type": "null"
                  }
                ]
              },
              {
                "type": "null"
              }
            ]
          },
          "rules_sha256": {
            "type": "string"
          }
        },
        "required": [
          "fee_model",
          "fees_enabled",
          "fee_schedule"
        ],
        "type": "object"
      },
      "UsagePage": {
        "additionalProperties": false,
        "properties": {
          "data": {
            "items": {
              "$ref": "#/components/schemas/View"
            },
            "type": "array"
          },
          "meta": {
            "$ref": "#/components/schemas/Meta"
          },
          "missing": {
            "items": {
              "$ref": "#/components/schemas/Missing"
            },
            "type": "array"
          }
        },
        "required": [
          "data",
          "missing",
          "meta"
        ],
        "type": "object"
      },
      "View": {
        "additionalProperties": false,
        "properties": {
          "daily": {
            "items": {
              "$ref": "#/components/schemas/Daily"
            },
            "type": "array"
          },
          "notices": {
            "items": {
              "$ref": "#/components/schemas/Notice"
            },
            "type": "array"
          },
          "operations": {
            "items": {
              "$ref": "#/components/schemas/OperationUsage"
            },
            "type": "array"
          },
          "pending_analytics": {
            "type": "integer"
          },
          "quota": {
            "$ref": "#/components/schemas/Summary"
          },
          "recent_requests": {
            "items": {
              "$ref": "#/components/schemas/Request"
            },
            "type": "array"
          }
        },
        "required": [
          "quota",
          "recent_requests",
          "notices",
          "pending_analytics",
          "daily",
          "operations"
        ],
        "type": "object"
      },
      "WSChange": {
        "additionalProperties": false,
        "properties": {
          "event_id": {
            "type": "string"
          },
          "position": {
            "type": "string"
          },
          "removes": {
            "items": {
              "$ref": "#/components/schemas/WSRemoval"
            },
            "type": "array"
          },
          "upserts": {
            "items": {
              "$ref": "#/components/schemas/Quote"
            },
            "type": "array"
          }
        },
        "required": [
          "event_id",
          "position",
          "upserts",
          "removes"
        ],
        "type": "object"
      },
      "WSCommand": {
        "additionalProperties": false,
        "properties": {
          "cursor": {
            "type": "string"
          },
          "id": {
            "type": "string"
          },
          "params": {
            "additionalProperties": {
              "type": "string"
            },
            "type": "object"
          },
          "type": {
            "enum": [
              "subscribe",
              "unsubscribe",
              "ping"
            ],
            "type": "string"
          }
        },
        "required": [
          "type",
          "id"
        ],
        "type": "object"
      },
      "WSFrame": {
        "additionalProperties": false,
        "properties": {
          "changes": {
            "items": {
              "$ref": "#/components/schemas/WSChange"
            },
            "type": "array"
          },
          "code": {
            "type": "string"
          },
          "connection_limit": {
            "type": "integer"
          },
          "cursor": {
            "type": "string"
          },
          "data": {
            "items": {
              "$ref": "#/components/schemas/Quote"
            },
            "type": "array"
          },
          "delivery_seq": {
            "type": "string"
          },
          "detail": {
            "type": "string"
          },
          "id": {
            "type": "string"
          },
          "missing": {
            "items": {
              "$ref": "#/components/schemas/Missing"
            },
            "type": "array"
          },
          "namespace": {
            "type": "string"
          },
          "position": {
            "type": "string"
          },
          "replace": {
            "type": "boolean"
          },
          "resume_seconds": {
            "type": "integer"
          },
          "sent_ts": {
            "format": "date-time",
            "type": "string"
          },
          "snapshot_ts": {
            "format": "date-time",
            "type": "string"
          },
          "subscription_limit": {
            "type": "integer"
          },
          "type": {
            "enum": [
              "hello",
              "snapshot",
              "delta",
              "state",
              "resumed",
              "unsubscribed",
              "pong",
              "heartbeat",
              "error",
              "resnapshot_required"
            ],
            "type": "string"
          }
        },
        "required": [
          "type",
          "delivery_seq",
          "sent_ts",
          "data",
          "changes",
          "missing",
          "replace"
        ],
        "type": "object"
      },
      "WSRemoval": {
        "additionalProperties": false,
        "properties": {
          "quote_key": {
            "type": "string"
          },
          "reason": {
            "type": "string"
          }
        },
        "required": [
          "quote_key",
          "reason"
        ],
        "type": "object"
      },
      "WebhookReceipt": {
        "additionalProperties": false,
        "properties": {
          "accepted": {
            "type": "boolean"
          },
          "duplicate": {
            "type": "boolean"
          }
        },
        "required": [
          "accepted",
          "duplicate"
        ],
        "type": "object"
      }
    },
    "securitySchemes": {
      "AccountSession": {
        "description": "Clerk session JWT, or one-hour CLI-only local session. No cookie authentication.",
        "scheme": "bearer",
        "type": "http"
      },
      "ApiKey": {
        "in": "header",
        "name": "X-API-Key",
        "type": "apiKey"
      }
    }
  },
  "externalDocs": {
    "description": "WebSocket v1 AsyncAPI contract",
    "url": "http://127.0.0.1:9113/asyncapi.json"
  },
  "info": {
    "description": "Generated from canonical/account/usage DTOs and handler registries. Atomic included credits and durable usage, UTC monthly cycles, overage off. Full local response write/flush is the observable completion boundary; uncertain crash/outage deliveries recover free. Live Clerk login needs provider setup. Test-only Stripe billing uses signed durable receipts and reconciled app entitlements; real sandbox verification remains open. Dashboard and WebSocket are local pilots. Bounded history/as-of/lines and CSV/Parquet exports require separate current history/export grants and source-purpose reviews. Public launch remains gated. Namespaces are never joined by coincident IDs.",
    "title": "Oddswire REST v1 local pilot",
    "version": "1.0.0"
  },
  "openapi": "3.1.2",
  "paths": {
    "/v1/account": {
      "get": {
        "description": "Private local pilot with account-wide included credits. Namespace-scoped IDs; overage off. Successful data pages cost one credit; account/errors/304/aborted or timed-out deliveries are free. No payment or source distribution rights are implied.",
        "operationId": "getAccount",
        "parameters": [
          {
            "description": "Weak semantic ETag; freshness and access are revalidated before 304.",
            "in": "header",
            "name": "If-None-Match",
            "required": false,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/AccountPage"
                }
              }
            },
            "description": "A typed page. Each successful data page costs one included credit, including explicit missing/insufficient states; account introspection is free. missing[] covers the full query.",
            "headers": {
              "X-Oddswire-Credit-Cost": {
                "$ref": "#/components/headers/X-Oddswire-Credit-Cost"
              },
              "X-Oddswire-Credits-Limit": {
                "$ref": "#/components/headers/X-Oddswire-Credits-Limit"
              },
              "X-Oddswire-Credits-Remaining": {
                "$ref": "#/components/headers/X-Oddswire-Credits-Remaining"
              },
              "X-Oddswire-Credits-Reserved": {
                "$ref": "#/components/headers/X-Oddswire-Credits-Reserved"
              },
              "X-Oddswire-Credits-Reset": {
                "$ref": "#/components/headers/X-Oddswire-Credits-Reset"
              },
              "X-Oddswire-Credits-Used": {
                "$ref": "#/components/headers/X-Oddswire-Credits-Used"
              },
              "X-Oddswire-Metering": {
                "$ref": "#/components/headers/X-Oddswire-Metering"
              },
              "X-Oddswire-Overage": {
                "$ref": "#/components/headers/X-Oddswire-Overage"
              },
              "X-Oddswire-Usage-State": {
                "$ref": "#/components/headers/X-Oddswire-Usage-State"
              },
              "X-Request-ID": {
                "$ref": "#/components/headers/X-Request-ID"
              }
            }
          },
          "304": {
            "description": "Semantically unchanged after authentication and eligibility validation; always zero credits, including at exhausted quota.",
            "headers": {
              "X-Oddswire-Credit-Cost": {
                "$ref": "#/components/headers/X-Oddswire-Credit-Cost"
              },
              "X-Oddswire-Credits-Limit": {
                "$ref": "#/components/headers/X-Oddswire-Credits-Limit"
              },
              "X-Oddswire-Credits-Remaining": {
                "$ref": "#/components/headers/X-Oddswire-Credits-Remaining"
              },
              "X-Oddswire-Credits-Reserved": {
                "$ref": "#/components/headers/X-Oddswire-Credits-Reserved"
              },
              "X-Oddswire-Credits-Reset": {
                "$ref": "#/components/headers/X-Oddswire-Credits-Reset"
              },
              "X-Oddswire-Credits-Used": {
                "$ref": "#/components/headers/X-Oddswire-Credits-Used"
              },
              "X-Oddswire-Metering": {
                "$ref": "#/components/headers/X-Oddswire-Metering"
              },
              "X-Oddswire-Overage": {
                "$ref": "#/components/headers/X-Oddswire-Overage"
              },
              "X-Oddswire-Usage-State": {
                "$ref": "#/components/headers/X-Oddswire-Usage-State"
              },
              "X-Request-ID": {
                "$ref": "#/components/headers/X-Request-ID"
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/Problem"
          },
          "401": {
            "$ref": "#/components/responses/Problem"
          },
          "402": {
            "$ref": "#/components/responses/Problem"
          },
          "403": {
            "$ref": "#/components/responses/Problem"
          },
          "404": {
            "$ref": "#/components/responses/Problem"
          },
          "405": {
            "$ref": "#/components/responses/Problem"
          },
          "409": {
            "$ref": "#/components/responses/Problem"
          },
          "414": {
            "$ref": "#/components/responses/Problem"
          },
          "422": {
            "$ref": "#/components/responses/Problem"
          },
          "429": {
            "$ref": "#/components/responses/Problem"
          },
          "500": {
            "$ref": "#/components/responses/Problem"
          },
          "503": {
            "$ref": "#/components/responses/Problem"
          },
          "504": {
            "$ref": "#/components/responses/Problem"
          }
        },
        "security": [
          {
            "ApiKey": []
          },
          {
            "AccountSession": []
          }
        ],
        "summary": "getAccount"
      }
    },
    "/v1/account/alert-deliveries": {
      "get": {
        "description": "Owner/admin session only; API keys and viewers cannot manage alerts. Control calls and outbound attempts use no REST credits. Separate alerts/odds grants, account-owned key, expiring alerts purpose review and current source access are required for rules and dispatch. POST request_id is an account-wide UUID idempotency key; retry identical content. Signing secrets appear once, including after rotation; duplicate mutation responses omit them. No external delivery is enabled automatically.",
        "operationId": "listAlertDeliveries",
        "parameters": [
          {
            "description": "UUID of an account where the signed-in user is a member; defaults to their oldest account.",
            "in": "header",
            "name": "X-Oddswire-Account",
            "required": false,
            "schema": {
              "format": "uuid",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/AlertDeliveriesPage"
                }
              }
            },
            "description": "Account ledger response; no-store. Key secrets appear only once on creation/rotation. Lists contain at most 100 recent entries, active keys first.",
            "headers": {
              "X-Oddswire-Credit-Cost": {
                "$ref": "#/components/headers/X-Oddswire-Credit-Cost"
              },
              "X-Oddswire-Credits-Limit": {
                "$ref": "#/components/headers/X-Oddswire-Credits-Limit"
              },
              "X-Oddswire-Credits-Remaining": {
                "$ref": "#/components/headers/X-Oddswire-Credits-Remaining"
              },
              "X-Oddswire-Credits-Reserved": {
                "$ref": "#/components/headers/X-Oddswire-Credits-Reserved"
              },
              "X-Oddswire-Credits-Reset": {
                "$ref": "#/components/headers/X-Oddswire-Credits-Reset"
              },
              "X-Oddswire-Credits-Used": {
                "$ref": "#/components/headers/X-Oddswire-Credits-Used"
              },
              "X-Oddswire-Metering": {
                "$ref": "#/components/headers/X-Oddswire-Metering"
              },
              "X-Oddswire-Overage": {
                "$ref": "#/components/headers/X-Oddswire-Overage"
              },
              "X-Oddswire-Usage-State": {
                "$ref": "#/components/headers/X-Oddswire-Usage-State"
              },
              "X-Request-ID": {
                "$ref": "#/components/headers/X-Request-ID"
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/Problem"
          },
          "401": {
            "$ref": "#/components/responses/Problem"
          },
          "403": {
            "$ref": "#/components/responses/Problem"
          },
          "404": {
            "$ref": "#/components/responses/Problem"
          },
          "405": {
            "$ref": "#/components/responses/Problem"
          },
          "409": {
            "$ref": "#/components/responses/Problem"
          },
          "422": {
            "$ref": "#/components/responses/Problem"
          },
          "429": {
            "$ref": "#/components/responses/Problem"
          },
          "500": {
            "$ref": "#/components/responses/Problem"
          },
          "503": {
            "$ref": "#/components/responses/Problem"
          },
          "504": {
            "$ref": "#/components/responses/Problem"
          }
        },
        "security": [
          {
            "AccountSession": []
          }
        ],
        "summary": "listAlertDeliveries"
      }
    },
    "/v1/account/alert-rules": {
      "get": {
        "description": "Owner/admin session only; API keys and viewers cannot manage alerts. Control calls and outbound attempts use no REST credits. Separate alerts/odds grants, account-owned key, expiring alerts purpose review and current source access are required for rules and dispatch. POST request_id is an account-wide UUID idempotency key; retry identical content. Signing secrets appear once, including after rotation; duplicate mutation responses omit them. No external delivery is enabled automatically.",
        "operationId": "listAlertRules",
        "parameters": [
          {
            "description": "UUID of an account where the signed-in user is a member; defaults to their oldest account.",
            "in": "header",
            "name": "X-Oddswire-Account",
            "required": false,
            "schema": {
              "format": "uuid",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/AlertRulesPage"
                }
              }
            },
            "description": "Account ledger response; no-store. Key secrets appear only once on creation/rotation. Lists contain at most 100 recent entries, active keys first.",
            "headers": {
              "X-Oddswire-Credit-Cost": {
                "$ref": "#/components/headers/X-Oddswire-Credit-Cost"
              },
              "X-Oddswire-Credits-Limit": {
                "$ref": "#/components/headers/X-Oddswire-Credits-Limit"
              },
              "X-Oddswire-Credits-Remaining": {
                "$ref": "#/components/headers/X-Oddswire-Credits-Remaining"
              },
              "X-Oddswire-Credits-Reserved": {
                "$ref": "#/components/headers/X-Oddswire-Credits-Reserved"
              },
              "X-Oddswire-Credits-Reset": {
                "$ref": "#/components/headers/X-Oddswire-Credits-Reset"
              },
              "X-Oddswire-Credits-Used": {
                "$ref": "#/components/headers/X-Oddswire-Credits-Used"
              },
              "X-Oddswire-Metering": {
                "$ref": "#/components/headers/X-Oddswire-Metering"
              },
              "X-Oddswire-Overage": {
                "$ref": "#/components/headers/X-Oddswire-Overage"
              },
              "X-Oddswire-Usage-State": {
                "$ref": "#/components/headers/X-Oddswire-Usage-State"
              },
              "X-Request-ID": {
                "$ref": "#/components/headers/X-Request-ID"
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/Problem"
          },
          "401": {
            "$ref": "#/components/responses/Problem"
          },
          "403": {
            "$ref": "#/components/responses/Problem"
          },
          "404": {
            "$ref": "#/components/responses/Problem"
          },
          "405": {
            "$ref": "#/components/responses/Problem"
          },
          "409": {
            "$ref": "#/components/responses/Problem"
          },
          "422": {
            "$ref": "#/components/responses/Problem"
          },
          "429": {
            "$ref": "#/components/responses/Problem"
          },
          "500": {
            "$ref": "#/components/responses/Problem"
          },
          "503": {
            "$ref": "#/components/responses/Problem"
          },
          "504": {
            "$ref": "#/components/responses/Problem"
          }
        },
        "security": [
          {
            "AccountSession": []
          }
        ],
        "summary": "listAlertRules"
      },
      "post": {
        "description": "Owner/admin session only; API keys and viewers cannot manage alerts. Control calls and outbound attempts use no REST credits. Separate alerts/odds grants, account-owned key, expiring alerts purpose review and current source access are required for rules and dispatch. POST request_id is an account-wide UUID idempotency key; retry identical content. Signing secrets appear once, including after rotation; duplicate mutation responses omit them. No external delivery is enabled automatically.",
        "operationId": "createAlertRule",
        "parameters": [
          {
            "description": "UUID of an account where the signed-in user is a member; defaults to their oldest account.",
            "in": "header",
            "name": "X-Oddswire-Account",
            "required": false,
            "schema": {
              "format": "uuid",
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/AlertRuleInput"
              }
            }
          },
          "required": true
        },
        "responses": {
          "201": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/AlertRulesPage"
                }
              }
            },
            "description": "Account ledger response; no-store. Key secrets appear only once on creation/rotation. Lists contain at most 100 recent entries, active keys first.",
            "headers": {
              "X-Oddswire-Credit-Cost": {
                "$ref": "#/components/headers/X-Oddswire-Credit-Cost"
              },
              "X-Oddswire-Credits-Limit": {
                "$ref": "#/components/headers/X-Oddswire-Credits-Limit"
              },
              "X-Oddswire-Credits-Remaining": {
                "$ref": "#/components/headers/X-Oddswire-Credits-Remaining"
              },
              "X-Oddswire-Credits-Reserved": {
                "$ref": "#/components/headers/X-Oddswire-Credits-Reserved"
              },
              "X-Oddswire-Credits-Reset": {
                "$ref": "#/components/headers/X-Oddswire-Credits-Reset"
              },
              "X-Oddswire-Credits-Used": {
                "$ref": "#/components/headers/X-Oddswire-Credits-Used"
              },
              "X-Oddswire-Metering": {
                "$ref": "#/components/headers/X-Oddswire-Metering"
              },
              "X-Oddswire-Overage": {
                "$ref": "#/components/headers/X-Oddswire-Overage"
              },
              "X-Oddswire-Usage-State": {
                "$ref": "#/components/headers/X-Oddswire-Usage-State"
              },
              "X-Request-ID": {
                "$ref": "#/components/headers/X-Request-ID"
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/Problem"
          },
          "401": {
            "$ref": "#/components/responses/Problem"
          },
          "403": {
            "$ref": "#/components/responses/Problem"
          },
          "404": {
            "$ref": "#/components/responses/Problem"
          },
          "405": {
            "$ref": "#/components/responses/Problem"
          },
          "409": {
            "$ref": "#/components/responses/Problem"
          },
          "422": {
            "$ref": "#/components/responses/Problem"
          },
          "429": {
            "$ref": "#/components/responses/Problem"
          },
          "500": {
            "$ref": "#/components/responses/Problem"
          },
          "503": {
            "$ref": "#/components/responses/Problem"
          },
          "504": {
            "$ref": "#/components/responses/Problem"
          }
        },
        "security": [
          {
            "AccountSession": []
          }
        ],
        "summary": "createAlertRule"
      }
    },
    "/v1/account/alert-rules/{rule_id}/disable": {
      "post": {
        "description": "Owner/admin session only; API keys and viewers cannot manage alerts. Control calls and outbound attempts use no REST credits. Separate alerts/odds grants, account-owned key, expiring alerts purpose review and current source access are required for rules and dispatch. POST request_id is an account-wide UUID idempotency key; retry identical content. Signing secrets appear once, including after rotation; duplicate mutation responses omit them. No external delivery is enabled automatically.",
        "operationId": "disableAlertRule",
        "parameters": [
          {
            "description": "UUID of an account where the signed-in user is a member; defaults to their oldest account.",
            "in": "header",
            "name": "X-Oddswire-Account",
            "required": false,
            "schema": {
              "format": "uuid",
              "type": "string"
            }
          },
          {
            "in": "path",
            "name": "rule_id",
            "required": true,
            "schema": {
              "format": "uuid",
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/AlertMutation"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/AlertRulesPage"
                }
              }
            },
            "description": "Account ledger response; no-store. Key secrets appear only once on creation/rotation. Lists contain at most 100 recent entries, active keys first.",
            "headers": {
              "X-Oddswire-Credit-Cost": {
                "$ref": "#/components/headers/X-Oddswire-Credit-Cost"
              },
              "X-Oddswire-Credits-Limit": {
                "$ref": "#/components/headers/X-Oddswire-Credits-Limit"
              },
              "X-Oddswire-Credits-Remaining": {
                "$ref": "#/components/headers/X-Oddswire-Credits-Remaining"
              },
              "X-Oddswire-Credits-Reserved": {
                "$ref": "#/components/headers/X-Oddswire-Credits-Reserved"
              },
              "X-Oddswire-Credits-Reset": {
                "$ref": "#/components/headers/X-Oddswire-Credits-Reset"
              },
              "X-Oddswire-Credits-Used": {
                "$ref": "#/components/headers/X-Oddswire-Credits-Used"
              },
              "X-Oddswire-Metering": {
                "$ref": "#/components/headers/X-Oddswire-Metering"
              },
              "X-Oddswire-Overage": {
                "$ref": "#/components/headers/X-Oddswire-Overage"
              },
              "X-Oddswire-Usage-State": {
                "$ref": "#/components/headers/X-Oddswire-Usage-State"
              },
              "X-Request-ID": {
                "$ref": "#/components/headers/X-Request-ID"
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/Problem"
          },
          "401": {
            "$ref": "#/components/responses/Problem"
          },
          "403": {
            "$ref": "#/components/responses/Problem"
          },
          "404": {
            "$ref": "#/components/responses/Problem"
          },
          "405": {
            "$ref": "#/components/responses/Problem"
          },
          "409": {
            "$ref": "#/components/responses/Problem"
          },
          "422": {
            "$ref": "#/components/responses/Problem"
          },
          "429": {
            "$ref": "#/components/responses/Problem"
          },
          "500": {
            "$ref": "#/components/responses/Problem"
          },
          "503": {
            "$ref": "#/components/responses/Problem"
          },
          "504": {
            "$ref": "#/components/responses/Problem"
          }
        },
        "security": [
          {
            "AccountSession": []
          }
        ],
        "summary": "disableAlertRule"
      }
    },
    "/v1/account/audit": {
      "get": {
        "description": "Requires an explicit Bearer Clerk session (or CLI-only local session). API keys cannot manage accounts. Owner/admin manages keys and audit; only owner changes existing member roles. POST auth/session enrolls an identity with zero API/Terminal grants. Provider login is unavailable until Clerk is configured.",
        "operationId": "listAccountAudit",
        "parameters": [
          {
            "description": "UUID of an account where the signed-in user is a member; defaults to their oldest account.",
            "in": "header",
            "name": "X-Oddswire-Account",
            "required": false,
            "schema": {
              "format": "uuid",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/AuditPage"
                }
              }
            },
            "description": "Account ledger response; no-store. Key secrets appear only once on creation/rotation. Lists contain at most 100 recent entries, active keys first.",
            "headers": {
              "X-Oddswire-Credit-Cost": {
                "$ref": "#/components/headers/X-Oddswire-Credit-Cost"
              },
              "X-Oddswire-Credits-Limit": {
                "$ref": "#/components/headers/X-Oddswire-Credits-Limit"
              },
              "X-Oddswire-Credits-Remaining": {
                "$ref": "#/components/headers/X-Oddswire-Credits-Remaining"
              },
              "X-Oddswire-Credits-Reserved": {
                "$ref": "#/components/headers/X-Oddswire-Credits-Reserved"
              },
              "X-Oddswire-Credits-Reset": {
                "$ref": "#/components/headers/X-Oddswire-Credits-Reset"
              },
              "X-Oddswire-Credits-Used": {
                "$ref": "#/components/headers/X-Oddswire-Credits-Used"
              },
              "X-Oddswire-Metering": {
                "$ref": "#/components/headers/X-Oddswire-Metering"
              },
              "X-Oddswire-Overage": {
                "$ref": "#/components/headers/X-Oddswire-Overage"
              },
              "X-Oddswire-Usage-State": {
                "$ref": "#/components/headers/X-Oddswire-Usage-State"
              },
              "X-Request-ID": {
                "$ref": "#/components/headers/X-Request-ID"
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/Problem"
          },
          "401": {
            "$ref": "#/components/responses/Problem"
          },
          "403": {
            "$ref": "#/components/responses/Problem"
          },
          "404": {
            "$ref": "#/components/responses/Problem"
          },
          "405": {
            "$ref": "#/components/responses/Problem"
          },
          "409": {
            "$ref": "#/components/responses/Problem"
          },
          "422": {
            "$ref": "#/components/responses/Problem"
          },
          "429": {
            "$ref": "#/components/responses/Problem"
          },
          "500": {
            "$ref": "#/components/responses/Problem"
          },
          "503": {
            "$ref": "#/components/responses/Problem"
          },
          "504": {
            "$ref": "#/components/responses/Problem"
          }
        },
        "security": [
          {
            "AccountSession": []
          }
        ],
        "summary": "listAccountAudit"
      }
    },
    "/v1/account/beta": {
      "get": {
        "description": "Invite-only personal API beta. Signup grants no data access. Acceptance requires the exact enrolled identity/account, approved region and acknowledgment. Source permissions, expiry and environment are revalidated on data reads. Global beta administration requires a separately provisioned operator, not a customer owner/admin. Invitations are shown once and never placed in URLs. Notices are local previews only; billing/Terminal are separate.",
        "operationId": "getBeta",
        "parameters": [
          {
            "description": "UUID of an account where the signed-in user is a member; defaults to their oldest account.",
            "in": "header",
            "name": "X-Oddswire-Account",
            "required": false,
            "schema": {
              "format": "uuid",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/BetaPage"
                }
              }
            },
            "description": "Account ledger response; no-store. Key secrets appear only once on creation/rotation. Lists contain at most 100 recent entries, active keys first.",
            "headers": {
              "X-Oddswire-Credit-Cost": {
                "$ref": "#/components/headers/X-Oddswire-Credit-Cost"
              },
              "X-Oddswire-Credits-Limit": {
                "$ref": "#/components/headers/X-Oddswire-Credits-Limit"
              },
              "X-Oddswire-Credits-Remaining": {
                "$ref": "#/components/headers/X-Oddswire-Credits-Remaining"
              },
              "X-Oddswire-Credits-Reserved": {
                "$ref": "#/components/headers/X-Oddswire-Credits-Reserved"
              },
              "X-Oddswire-Credits-Reset": {
                "$ref": "#/components/headers/X-Oddswire-Credits-Reset"
              },
              "X-Oddswire-Credits-Used": {
                "$ref": "#/components/headers/X-Oddswire-Credits-Used"
              },
              "X-Oddswire-Metering": {
                "$ref": "#/components/headers/X-Oddswire-Metering"
              },
              "X-Oddswire-Overage": {
                "$ref": "#/components/headers/X-Oddswire-Overage"
              },
              "X-Oddswire-Usage-State": {
                "$ref": "#/components/headers/X-Oddswire-Usage-State"
              },
              "X-Request-ID": {
                "$ref": "#/components/headers/X-Request-ID"
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/Problem"
          },
          "401": {
            "$ref": "#/components/responses/Problem"
          },
          "403": {
            "$ref": "#/components/responses/Problem"
          },
          "404": {
            "$ref": "#/components/responses/Problem"
          },
          "405": {
            "$ref": "#/components/responses/Problem"
          },
          "409": {
            "$ref": "#/components/responses/Problem"
          },
          "422": {
            "$ref": "#/components/responses/Problem"
          },
          "429": {
            "$ref": "#/components/responses/Problem"
          },
          "500": {
            "$ref": "#/components/responses/Problem"
          },
          "503": {
            "$ref": "#/components/responses/Problem"
          },
          "504": {
            "$ref": "#/components/responses/Problem"
          }
        },
        "security": [
          {
            "AccountSession": []
          }
        ],
        "summary": "getBeta"
      }
    },
    "/v1/account/beta/accept": {
      "post": {
        "description": "Invite-only personal API beta. Signup grants no data access. Acceptance requires the exact enrolled identity/account, approved region and acknowledgment. Source permissions, expiry and environment are revalidated on data reads. Global beta administration requires a separately provisioned operator, not a customer owner/admin. Invitations are shown once and never placed in URLs. Notices are local previews only; billing/Terminal are separate.",
        "operationId": "acceptBeta",
        "parameters": [
          {
            "description": "UUID of an account where the signed-in user is a member; defaults to their oldest account.",
            "in": "header",
            "name": "X-Oddswire-Account",
            "required": false,
            "schema": {
              "format": "uuid",
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/BetaAccept"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/BetaPage"
                }
              }
            },
            "description": "Account ledger response; no-store. Key secrets appear only once on creation/rotation. Lists contain at most 100 recent entries, active keys first.",
            "headers": {
              "X-Oddswire-Credit-Cost": {
                "$ref": "#/components/headers/X-Oddswire-Credit-Cost"
              },
              "X-Oddswire-Credits-Limit": {
                "$ref": "#/components/headers/X-Oddswire-Credits-Limit"
              },
              "X-Oddswire-Credits-Remaining": {
                "$ref": "#/components/headers/X-Oddswire-Credits-Remaining"
              },
              "X-Oddswire-Credits-Reserved": {
                "$ref": "#/components/headers/X-Oddswire-Credits-Reserved"
              },
              "X-Oddswire-Credits-Reset": {
                "$ref": "#/components/headers/X-Oddswire-Credits-Reset"
              },
              "X-Oddswire-Credits-Used": {
                "$ref": "#/components/headers/X-Oddswire-Credits-Used"
              },
              "X-Oddswire-Metering": {
                "$ref": "#/components/headers/X-Oddswire-Metering"
              },
              "X-Oddswire-Overage": {
                "$ref": "#/components/headers/X-Oddswire-Overage"
              },
              "X-Oddswire-Usage-State": {
                "$ref": "#/components/headers/X-Oddswire-Usage-State"
              },
              "X-Request-ID": {
                "$ref": "#/components/headers/X-Request-ID"
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/Problem"
          },
          "401": {
            "$ref": "#/components/responses/Problem"
          },
          "403": {
            "$ref": "#/components/responses/Problem"
          },
          "404": {
            "$ref": "#/components/responses/Problem"
          },
          "405": {
            "$ref": "#/components/responses/Problem"
          },
          "409": {
            "$ref": "#/components/responses/Problem"
          },
          "410": {
            "$ref": "#/components/responses/Problem"
          },
          "422": {
            "$ref": "#/components/responses/Problem"
          },
          "429": {
            "$ref": "#/components/responses/Problem"
          },
          "500": {
            "$ref": "#/components/responses/Problem"
          },
          "503": {
            "$ref": "#/components/responses/Problem"
          },
          "504": {
            "$ref": "#/components/responses/Problem"
          }
        },
        "security": [
          {
            "AccountSession": []
          }
        ],
        "summary": "acceptBeta"
      }
    },
    "/v1/account/billing": {
      "get": {
        "description": "Test-only billing; owner session required for mutations, owner/admin for reads. Fixed test catalogue; enrollment ceiling controls source access. Checkout returns do not activate grants. Retry unresolved mutations with the same request UUID. UTC credit cycles, no usage refill, overage off, no Terminal billing or data rights granted.",
        "operationId": "getBilling",
        "parameters": [
          {
            "description": "UUID of an account where the signed-in user is a member; defaults to their oldest account.",
            "in": "header",
            "name": "X-Oddswire-Account",
            "required": false,
            "schema": {
              "format": "uuid",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/BillingPage"
                }
              }
            },
            "description": "Account ledger response; no-store. Key secrets appear only once on creation/rotation. Lists contain at most 100 recent entries, active keys first.",
            "headers": {
              "X-Oddswire-Credit-Cost": {
                "$ref": "#/components/headers/X-Oddswire-Credit-Cost"
              },
              "X-Oddswire-Credits-Limit": {
                "$ref": "#/components/headers/X-Oddswire-Credits-Limit"
              },
              "X-Oddswire-Credits-Remaining": {
                "$ref": "#/components/headers/X-Oddswire-Credits-Remaining"
              },
              "X-Oddswire-Credits-Reserved": {
                "$ref": "#/components/headers/X-Oddswire-Credits-Reserved"
              },
              "X-Oddswire-Credits-Reset": {
                "$ref": "#/components/headers/X-Oddswire-Credits-Reset"
              },
              "X-Oddswire-Credits-Used": {
                "$ref": "#/components/headers/X-Oddswire-Credits-Used"
              },
              "X-Oddswire-Metering": {
                "$ref": "#/components/headers/X-Oddswire-Metering"
              },
              "X-Oddswire-Overage": {
                "$ref": "#/components/headers/X-Oddswire-Overage"
              },
              "X-Oddswire-Usage-State": {
                "$ref": "#/components/headers/X-Oddswire-Usage-State"
              },
              "X-Request-ID": {
                "$ref": "#/components/headers/X-Request-ID"
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/Problem"
          },
          "401": {
            "$ref": "#/components/responses/Problem"
          },
          "403": {
            "$ref": "#/components/responses/Problem"
          },
          "404": {
            "$ref": "#/components/responses/Problem"
          },
          "405": {
            "$ref": "#/components/responses/Problem"
          },
          "409": {
            "$ref": "#/components/responses/Problem"
          },
          "422": {
            "$ref": "#/components/responses/Problem"
          },
          "429": {
            "$ref": "#/components/responses/Problem"
          },
          "500": {
            "$ref": "#/components/responses/Problem"
          },
          "503": {
            "$ref": "#/components/responses/Problem"
          },
          "504": {
            "$ref": "#/components/responses/Problem"
          }
        },
        "security": [
          {
            "AccountSession": []
          }
        ],
        "summary": "getBilling"
      }
    },
    "/v1/account/billing/cancel": {
      "post": {
        "description": "Test-only billing; owner session required for mutations, owner/admin for reads. Fixed test catalogue; enrollment ceiling controls source access. Checkout returns do not activate grants. Retry unresolved mutations with the same request UUID. UTC credit cycles, no usage refill, overage off, no Terminal billing or data rights granted.",
        "operationId": "billingCancel",
        "parameters": [
          {
            "description": "UUID of an account where the signed-in user is a member; defaults to their oldest account.",
            "in": "header",
            "name": "X-Oddswire-Account",
            "required": false,
            "schema": {
              "format": "uuid",
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/BillingActionInput"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/BillingActionPage"
                }
              }
            },
            "description": "Account ledger response; no-store. Key secrets appear only once on creation/rotation. Lists contain at most 100 recent entries, active keys first.",
            "headers": {
              "X-Oddswire-Credit-Cost": {
                "$ref": "#/components/headers/X-Oddswire-Credit-Cost"
              },
              "X-Oddswire-Credits-Limit": {
                "$ref": "#/components/headers/X-Oddswire-Credits-Limit"
              },
              "X-Oddswire-Credits-Remaining": {
                "$ref": "#/components/headers/X-Oddswire-Credits-Remaining"
              },
              "X-Oddswire-Credits-Reserved": {
                "$ref": "#/components/headers/X-Oddswire-Credits-Reserved"
              },
              "X-Oddswire-Credits-Reset": {
                "$ref": "#/components/headers/X-Oddswire-Credits-Reset"
              },
              "X-Oddswire-Credits-Used": {
                "$ref": "#/components/headers/X-Oddswire-Credits-Used"
              },
              "X-Oddswire-Metering": {
                "$ref": "#/components/headers/X-Oddswire-Metering"
              },
              "X-Oddswire-Overage": {
                "$ref": "#/components/headers/X-Oddswire-Overage"
              },
              "X-Oddswire-Usage-State": {
                "$ref": "#/components/headers/X-Oddswire-Usage-State"
              },
              "X-Request-ID": {
                "$ref": "#/components/headers/X-Request-ID"
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/Problem"
          },
          "401": {
            "$ref": "#/components/responses/Problem"
          },
          "403": {
            "$ref": "#/components/responses/Problem"
          },
          "404": {
            "$ref": "#/components/responses/Problem"
          },
          "405": {
            "$ref": "#/components/responses/Problem"
          },
          "409": {
            "$ref": "#/components/responses/Problem"
          },
          "422": {
            "$ref": "#/components/responses/Problem"
          },
          "429": {
            "$ref": "#/components/responses/Problem"
          },
          "500": {
            "$ref": "#/components/responses/Problem"
          },
          "503": {
            "$ref": "#/components/responses/Problem"
          },
          "504": {
            "$ref": "#/components/responses/Problem"
          }
        },
        "security": [
          {
            "AccountSession": []
          }
        ],
        "summary": "billingCancel"
      }
    },
    "/v1/account/billing/change": {
      "post": {
        "description": "Test-only billing; owner session required for mutations, owner/admin for reads. Fixed test catalogue; enrollment ceiling controls source access. Checkout returns do not activate grants. Retry unresolved mutations with the same request UUID. UTC credit cycles, no usage refill, overage off, no Terminal billing or data rights granted.",
        "operationId": "billingChange",
        "parameters": [
          {
            "description": "UUID of an account where the signed-in user is a member; defaults to their oldest account.",
            "in": "header",
            "name": "X-Oddswire-Account",
            "required": false,
            "schema": {
              "format": "uuid",
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/BillingActionInput"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/BillingActionPage"
                }
              }
            },
            "description": "Account ledger response; no-store. Key secrets appear only once on creation/rotation. Lists contain at most 100 recent entries, active keys first.",
            "headers": {
              "X-Oddswire-Credit-Cost": {
                "$ref": "#/components/headers/X-Oddswire-Credit-Cost"
              },
              "X-Oddswire-Credits-Limit": {
                "$ref": "#/components/headers/X-Oddswire-Credits-Limit"
              },
              "X-Oddswire-Credits-Remaining": {
                "$ref": "#/components/headers/X-Oddswire-Credits-Remaining"
              },
              "X-Oddswire-Credits-Reserved": {
                "$ref": "#/components/headers/X-Oddswire-Credits-Reserved"
              },
              "X-Oddswire-Credits-Reset": {
                "$ref": "#/components/headers/X-Oddswire-Credits-Reset"
              },
              "X-Oddswire-Credits-Used": {
                "$ref": "#/components/headers/X-Oddswire-Credits-Used"
              },
              "X-Oddswire-Metering": {
                "$ref": "#/components/headers/X-Oddswire-Metering"
              },
              "X-Oddswire-Overage": {
                "$ref": "#/components/headers/X-Oddswire-Overage"
              },
              "X-Oddswire-Usage-State": {
                "$ref": "#/components/headers/X-Oddswire-Usage-State"
              },
              "X-Request-ID": {
                "$ref": "#/components/headers/X-Request-ID"
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/Problem"
          },
          "401": {
            "$ref": "#/components/responses/Problem"
          },
          "403": {
            "$ref": "#/components/responses/Problem"
          },
          "404": {
            "$ref": "#/components/responses/Problem"
          },
          "405": {
            "$ref": "#/components/responses/Problem"
          },
          "409": {
            "$ref": "#/components/responses/Problem"
          },
          "422": {
            "$ref": "#/components/responses/Problem"
          },
          "429": {
            "$ref": "#/components/responses/Problem"
          },
          "500": {
            "$ref": "#/components/responses/Problem"
          },
          "503": {
            "$ref": "#/components/responses/Problem"
          },
          "504": {
            "$ref": "#/components/responses/Problem"
          }
        },
        "security": [
          {
            "AccountSession": []
          }
        ],
        "summary": "billingChange"
      }
    },
    "/v1/account/billing/checkout": {
      "post": {
        "description": "Test-only billing; owner session required for mutations, owner/admin for reads. Fixed test catalogue; enrollment ceiling controls source access. Checkout returns do not activate grants. Retry unresolved mutations with the same request UUID. UTC credit cycles, no usage refill, overage off, no Terminal billing or data rights granted.",
        "operationId": "billingCheckout",
        "parameters": [
          {
            "description": "UUID of an account where the signed-in user is a member; defaults to their oldest account.",
            "in": "header",
            "name": "X-Oddswire-Account",
            "required": false,
            "schema": {
              "format": "uuid",
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/BillingActionInput"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/BillingActionPage"
                }
              }
            },
            "description": "Account ledger response; no-store. Key secrets appear only once on creation/rotation. Lists contain at most 100 recent entries, active keys first.",
            "headers": {
              "X-Oddswire-Credit-Cost": {
                "$ref": "#/components/headers/X-Oddswire-Credit-Cost"
              },
              "X-Oddswire-Credits-Limit": {
                "$ref": "#/components/headers/X-Oddswire-Credits-Limit"
              },
              "X-Oddswire-Credits-Remaining": {
                "$ref": "#/components/headers/X-Oddswire-Credits-Remaining"
              },
              "X-Oddswire-Credits-Reserved": {
                "$ref": "#/components/headers/X-Oddswire-Credits-Reserved"
              },
              "X-Oddswire-Credits-Reset": {
                "$ref": "#/components/headers/X-Oddswire-Credits-Reset"
              },
              "X-Oddswire-Credits-Used": {
                "$ref": "#/components/headers/X-Oddswire-Credits-Used"
              },
              "X-Oddswire-Metering": {
                "$ref": "#/components/headers/X-Oddswire-Metering"
              },
              "X-Oddswire-Overage": {
                "$ref": "#/components/headers/X-Oddswire-Overage"
              },
              "X-Oddswire-Usage-State": {
                "$ref": "#/components/headers/X-Oddswire-Usage-State"
              },
              "X-Request-ID": {
                "$ref": "#/components/headers/X-Request-ID"
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/Problem"
          },
          "401": {
            "$ref": "#/components/responses/Problem"
          },
          "403": {
            "$ref": "#/components/responses/Problem"
          },
          "404": {
            "$ref": "#/components/responses/Problem"
          },
          "405": {
            "$ref": "#/components/responses/Problem"
          },
          "409": {
            "$ref": "#/components/responses/Problem"
          },
          "422": {
            "$ref": "#/components/responses/Problem"
          },
          "429": {
            "$ref": "#/components/responses/Problem"
          },
          "500": {
            "$ref": "#/components/responses/Problem"
          },
          "503": {
            "$ref": "#/components/responses/Problem"
          },
          "504": {
            "$ref": "#/components/responses/Problem"
          }
        },
        "security": [
          {
            "AccountSession": []
          }
        ],
        "summary": "billingCheckout"
      }
    },
    "/v1/account/billing/portal": {
      "post": {
        "description": "Test-only billing; owner session required for mutations, owner/admin for reads. Fixed test catalogue; enrollment ceiling controls source access. Checkout returns do not activate grants. Retry unresolved mutations with the same request UUID. UTC credit cycles, no usage refill, overage off, no Terminal billing or data rights granted.",
        "operationId": "billingPortal",
        "parameters": [
          {
            "description": "UUID of an account where the signed-in user is a member; defaults to their oldest account.",
            "in": "header",
            "name": "X-Oddswire-Account",
            "required": false,
            "schema": {
              "format": "uuid",
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/BillingActionInput"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/BillingActionPage"
                }
              }
            },
            "description": "Account ledger response; no-store. Key secrets appear only once on creation/rotation. Lists contain at most 100 recent entries, active keys first.",
            "headers": {
              "X-Oddswire-Credit-Cost": {
                "$ref": "#/components/headers/X-Oddswire-Credit-Cost"
              },
              "X-Oddswire-Credits-Limit": {
                "$ref": "#/components/headers/X-Oddswire-Credits-Limit"
              },
              "X-Oddswire-Credits-Remaining": {
                "$ref": "#/components/headers/X-Oddswire-Credits-Remaining"
              },
              "X-Oddswire-Credits-Reserved": {
                "$ref": "#/components/headers/X-Oddswire-Credits-Reserved"
              },
              "X-Oddswire-Credits-Reset": {
                "$ref": "#/components/headers/X-Oddswire-Credits-Reset"
              },
              "X-Oddswire-Credits-Used": {
                "$ref": "#/components/headers/X-Oddswire-Credits-Used"
              },
              "X-Oddswire-Metering": {
                "$ref": "#/components/headers/X-Oddswire-Metering"
              },
              "X-Oddswire-Overage": {
                "$ref": "#/components/headers/X-Oddswire-Overage"
              },
              "X-Oddswire-Usage-State": {
                "$ref": "#/components/headers/X-Oddswire-Usage-State"
              },
              "X-Request-ID": {
                "$ref": "#/components/headers/X-Request-ID"
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/Problem"
          },
          "401": {
            "$ref": "#/components/responses/Problem"
          },
          "403": {
            "$ref": "#/components/responses/Problem"
          },
          "404": {
            "$ref": "#/components/responses/Problem"
          },
          "405": {
            "$ref": "#/components/responses/Problem"
          },
          "409": {
            "$ref": "#/components/responses/Problem"
          },
          "422": {
            "$ref": "#/components/responses/Problem"
          },
          "429": {
            "$ref": "#/components/responses/Problem"
          },
          "500": {
            "$ref": "#/components/responses/Problem"
          },
          "503": {
            "$ref": "#/components/responses/Problem"
          },
          "504": {
            "$ref": "#/components/responses/Problem"
          }
        },
        "security": [
          {
            "AccountSession": []
          }
        ],
        "summary": "billingPortal"
      }
    },
    "/v1/account/billing/reconcile": {
      "post": {
        "description": "Test-only billing; owner session required for mutations, owner/admin for reads. Fixed test catalogue; enrollment ceiling controls source access. Checkout returns do not activate grants. Retry unresolved mutations with the same request UUID. UTC credit cycles, no usage refill, overage off, no Terminal billing or data rights granted.",
        "operationId": "billingReconcile",
        "parameters": [
          {
            "description": "UUID of an account where the signed-in user is a member; defaults to their oldest account.",
            "in": "header",
            "name": "X-Oddswire-Account",
            "required": false,
            "schema": {
              "format": "uuid",
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/BillingActionInput"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/BillingActionPage"
                }
              }
            },
            "description": "Account ledger response; no-store. Key secrets appear only once on creation/rotation. Lists contain at most 100 recent entries, active keys first.",
            "headers": {
              "X-Oddswire-Credit-Cost": {
                "$ref": "#/components/headers/X-Oddswire-Credit-Cost"
              },
              "X-Oddswire-Credits-Limit": {
                "$ref": "#/components/headers/X-Oddswire-Credits-Limit"
              },
              "X-Oddswire-Credits-Remaining": {
                "$ref": "#/components/headers/X-Oddswire-Credits-Remaining"
              },
              "X-Oddswire-Credits-Reserved": {
                "$ref": "#/components/headers/X-Oddswire-Credits-Reserved"
              },
              "X-Oddswire-Credits-Reset": {
                "$ref": "#/components/headers/X-Oddswire-Credits-Reset"
              },
              "X-Oddswire-Credits-Used": {
                "$ref": "#/components/headers/X-Oddswire-Credits-Used"
              },
              "X-Oddswire-Metering": {
                "$ref": "#/components/headers/X-Oddswire-Metering"
              },
              "X-Oddswire-Overage": {
                "$ref": "#/components/headers/X-Oddswire-Overage"
              },
              "X-Oddswire-Usage-State": {
                "$ref": "#/components/headers/X-Oddswire-Usage-State"
              },
              "X-Request-ID": {
                "$ref": "#/components/headers/X-Request-ID"
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/Problem"
          },
          "401": {
            "$ref": "#/components/responses/Problem"
          },
          "403": {
            "$ref": "#/components/responses/Problem"
          },
          "404": {
            "$ref": "#/components/responses/Problem"
          },
          "405": {
            "$ref": "#/components/responses/Problem"
          },
          "409": {
            "$ref": "#/components/responses/Problem"
          },
          "422": {
            "$ref": "#/components/responses/Problem"
          },
          "429": {
            "$ref": "#/components/responses/Problem"
          },
          "500": {
            "$ref": "#/components/responses/Problem"
          },
          "503": {
            "$ref": "#/components/responses/Problem"
          },
          "504": {
            "$ref": "#/components/responses/Problem"
          }
        },
        "security": [
          {
            "AccountSession": []
          }
        ],
        "summary": "billingReconcile"
      }
    },
    "/v1/account/billing/refund": {
      "post": {
        "description": "Test-only billing; owner session required for mutations, owner/admin for reads. Fixed test catalogue; enrollment ceiling controls source access. Checkout returns do not activate grants. Retry unresolved mutations with the same request UUID. UTC credit cycles, no usage refill, overage off, no Terminal billing or data rights granted.",
        "operationId": "billingRefund",
        "parameters": [
          {
            "description": "UUID of an account where the signed-in user is a member; defaults to their oldest account.",
            "in": "header",
            "name": "X-Oddswire-Account",
            "required": false,
            "schema": {
              "format": "uuid",
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/BillingActionInput"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/BillingActionPage"
                }
              }
            },
            "description": "Account ledger response; no-store. Key secrets appear only once on creation/rotation. Lists contain at most 100 recent entries, active keys first.",
            "headers": {
              "X-Oddswire-Credit-Cost": {
                "$ref": "#/components/headers/X-Oddswire-Credit-Cost"
              },
              "X-Oddswire-Credits-Limit": {
                "$ref": "#/components/headers/X-Oddswire-Credits-Limit"
              },
              "X-Oddswire-Credits-Remaining": {
                "$ref": "#/components/headers/X-Oddswire-Credits-Remaining"
              },
              "X-Oddswire-Credits-Reserved": {
                "$ref": "#/components/headers/X-Oddswire-Credits-Reserved"
              },
              "X-Oddswire-Credits-Reset": {
                "$ref": "#/components/headers/X-Oddswire-Credits-Reset"
              },
              "X-Oddswire-Credits-Used": {
                "$ref": "#/components/headers/X-Oddswire-Credits-Used"
              },
              "X-Oddswire-Metering": {
                "$ref": "#/components/headers/X-Oddswire-Metering"
              },
              "X-Oddswire-Overage": {
                "$ref": "#/components/headers/X-Oddswire-Overage"
              },
              "X-Oddswire-Usage-State": {
                "$ref": "#/components/headers/X-Oddswire-Usage-State"
              },
              "X-Request-ID": {
                "$ref": "#/components/headers/X-Request-ID"
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/Problem"
          },
          "401": {
            "$ref": "#/components/responses/Problem"
          },
          "403": {
            "$ref": "#/components/responses/Problem"
          },
          "404": {
            "$ref": "#/components/responses/Problem"
          },
          "405": {
            "$ref": "#/components/responses/Problem"
          },
          "409": {
            "$ref": "#/components/responses/Problem"
          },
          "422": {
            "$ref": "#/components/responses/Problem"
          },
          "429": {
            "$ref": "#/components/responses/Problem"
          },
          "500": {
            "$ref": "#/components/responses/Problem"
          },
          "503": {
            "$ref": "#/components/responses/Problem"
          },
          "504": {
            "$ref": "#/components/responses/Problem"
          }
        },
        "security": [
          {
            "AccountSession": []
          }
        ],
        "summary": "billingRefund"
      }
    },
    "/v1/account/coverage": {
      "get": {
        "description": "Private local pilot with account-wide included credits. Namespace-scoped IDs; overage off. Successful data pages cost one credit; account/errors/304/aborted or timed-out deliveries are free. No payment or source distribution rights are implied.",
        "operationId": "getAccountCoverage",
        "parameters": [
          {
            "description": "Weak semantic ETag; freshness and access are revalidated before 304.",
            "in": "header",
            "name": "If-None-Match",
            "required": false,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/CoveragePage"
                }
              }
            },
            "description": "A typed page. Each successful data page costs one included credit, including explicit missing/insufficient states; account introspection is free. missing[] covers the full query.",
            "headers": {
              "X-Oddswire-Credit-Cost": {
                "$ref": "#/components/headers/X-Oddswire-Credit-Cost"
              },
              "X-Oddswire-Credits-Limit": {
                "$ref": "#/components/headers/X-Oddswire-Credits-Limit"
              },
              "X-Oddswire-Credits-Remaining": {
                "$ref": "#/components/headers/X-Oddswire-Credits-Remaining"
              },
              "X-Oddswire-Credits-Reserved": {
                "$ref": "#/components/headers/X-Oddswire-Credits-Reserved"
              },
              "X-Oddswire-Credits-Reset": {
                "$ref": "#/components/headers/X-Oddswire-Credits-Reset"
              },
              "X-Oddswire-Credits-Used": {
                "$ref": "#/components/headers/X-Oddswire-Credits-Used"
              },
              "X-Oddswire-Metering": {
                "$ref": "#/components/headers/X-Oddswire-Metering"
              },
              "X-Oddswire-Overage": {
                "$ref": "#/components/headers/X-Oddswire-Overage"
              },
              "X-Oddswire-Usage-State": {
                "$ref": "#/components/headers/X-Oddswire-Usage-State"
              },
              "X-Request-ID": {
                "$ref": "#/components/headers/X-Request-ID"
              }
            }
          },
          "304": {
            "description": "Semantically unchanged after authentication and eligibility validation; always zero credits, including at exhausted quota.",
            "headers": {
              "X-Oddswire-Credit-Cost": {
                "$ref": "#/components/headers/X-Oddswire-Credit-Cost"
              },
              "X-Oddswire-Credits-Limit": {
                "$ref": "#/components/headers/X-Oddswire-Credits-Limit"
              },
              "X-Oddswire-Credits-Remaining": {
                "$ref": "#/components/headers/X-Oddswire-Credits-Remaining"
              },
              "X-Oddswire-Credits-Reserved": {
                "$ref": "#/components/headers/X-Oddswire-Credits-Reserved"
              },
              "X-Oddswire-Credits-Reset": {
                "$ref": "#/components/headers/X-Oddswire-Credits-Reset"
              },
              "X-Oddswire-Credits-Used": {
                "$ref": "#/components/headers/X-Oddswire-Credits-Used"
              },
              "X-Oddswire-Metering": {
                "$ref": "#/components/headers/X-Oddswire-Metering"
              },
              "X-Oddswire-Overage": {
                "$ref": "#/components/headers/X-Oddswire-Overage"
              },
              "X-Oddswire-Usage-State": {
                "$ref": "#/components/headers/X-Oddswire-Usage-State"
              },
              "X-Request-ID": {
                "$ref": "#/components/headers/X-Request-ID"
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/Problem"
          },
          "401": {
            "$ref": "#/components/responses/Problem"
          },
          "402": {
            "$ref": "#/components/responses/Problem"
          },
          "403": {
            "$ref": "#/components/responses/Problem"
          },
          "404": {
            "$ref": "#/components/responses/Problem"
          },
          "405": {
            "$ref": "#/components/responses/Problem"
          },
          "409": {
            "$ref": "#/components/responses/Problem"
          },
          "414": {
            "$ref": "#/components/responses/Problem"
          },
          "422": {
            "$ref": "#/components/responses/Problem"
          },
          "429": {
            "$ref": "#/components/responses/Problem"
          },
          "500": {
            "$ref": "#/components/responses/Problem"
          },
          "503": {
            "$ref": "#/components/responses/Problem"
          },
          "504": {
            "$ref": "#/components/responses/Problem"
          }
        },
        "security": [
          {
            "ApiKey": []
          },
          {
            "AccountSession": []
          }
        ],
        "summary": "getAccountCoverage"
      }
    },
    "/v1/account/entitlements": {
      "get": {
        "description": "Private local pilot with account-wide included credits. Namespace-scoped IDs; overage off. Successful data pages cost one credit; account/errors/304/aborted or timed-out deliveries are free. No payment or source distribution rights are implied.",
        "operationId": "getEntitlements",
        "parameters": [
          {
            "description": "Weak semantic ETag; freshness and access are revalidated before 304.",
            "in": "header",
            "name": "If-None-Match",
            "required": false,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/EntitlementsPage"
                }
              }
            },
            "description": "A typed page. Each successful data page costs one included credit, including explicit missing/insufficient states; account introspection is free. missing[] covers the full query.",
            "headers": {
              "X-Oddswire-Credit-Cost": {
                "$ref": "#/components/headers/X-Oddswire-Credit-Cost"
              },
              "X-Oddswire-Credits-Limit": {
                "$ref": "#/components/headers/X-Oddswire-Credits-Limit"
              },
              "X-Oddswire-Credits-Remaining": {
                "$ref": "#/components/headers/X-Oddswire-Credits-Remaining"
              },
              "X-Oddswire-Credits-Reserved": {
                "$ref": "#/components/headers/X-Oddswire-Credits-Reserved"
              },
              "X-Oddswire-Credits-Reset": {
                "$ref": "#/components/headers/X-Oddswire-Credits-Reset"
              },
              "X-Oddswire-Credits-Used": {
                "$ref": "#/components/headers/X-Oddswire-Credits-Used"
              },
              "X-Oddswire-Metering": {
                "$ref": "#/components/headers/X-Oddswire-Metering"
              },
              "X-Oddswire-Overage": {
                "$ref": "#/components/headers/X-Oddswire-Overage"
              },
              "X-Oddswire-Usage-State": {
                "$ref": "#/components/headers/X-Oddswire-Usage-State"
              },
              "X-Request-ID": {
                "$ref": "#/components/headers/X-Request-ID"
              }
            }
          },
          "304": {
            "description": "Semantically unchanged after authentication and eligibility validation; always zero credits, including at exhausted quota.",
            "headers": {
              "X-Oddswire-Credit-Cost": {
                "$ref": "#/components/headers/X-Oddswire-Credit-Cost"
              },
              "X-Oddswire-Credits-Limit": {
                "$ref": "#/components/headers/X-Oddswire-Credits-Limit"
              },
              "X-Oddswire-Credits-Remaining": {
                "$ref": "#/components/headers/X-Oddswire-Credits-Remaining"
              },
              "X-Oddswire-Credits-Reserved": {
                "$ref": "#/components/headers/X-Oddswire-Credits-Reserved"
              },
              "X-Oddswire-Credits-Reset": {
                "$ref": "#/components/headers/X-Oddswire-Credits-Reset"
              },
              "X-Oddswire-Credits-Used": {
                "$ref": "#/components/headers/X-Oddswire-Credits-Used"
              },
              "X-Oddswire-Metering": {
                "$ref": "#/components/headers/X-Oddswire-Metering"
              },
              "X-Oddswire-Overage": {
                "$ref": "#/components/headers/X-Oddswire-Overage"
              },
              "X-Oddswire-Usage-State": {
                "$ref": "#/components/headers/X-Oddswire-Usage-State"
              },
              "X-Request-ID": {
                "$ref": "#/components/headers/X-Request-ID"
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/Problem"
          },
          "401": {
            "$ref": "#/components/responses/Problem"
          },
          "402": {
            "$ref": "#/components/responses/Problem"
          },
          "403": {
            "$ref": "#/components/responses/Problem"
          },
          "404": {
            "$ref": "#/components/responses/Problem"
          },
          "405": {
            "$ref": "#/components/responses/Problem"
          },
          "409": {
            "$ref": "#/components/responses/Problem"
          },
          "414": {
            "$ref": "#/components/responses/Problem"
          },
          "422": {
            "$ref": "#/components/responses/Problem"
          },
          "429": {
            "$ref": "#/components/responses/Problem"
          },
          "500": {
            "$ref": "#/components/responses/Problem"
          },
          "503": {
            "$ref": "#/components/responses/Problem"
          },
          "504": {
            "$ref": "#/components/responses/Problem"
          }
        },
        "security": [
          {
            "ApiKey": []
          },
          {
            "AccountSession": []
          }
        ],
        "summary": "getEntitlements"
      }
    },
    "/v1/account/keys": {
      "get": {
        "description": "Requires an explicit Bearer Clerk session (or CLI-only local session). API keys cannot manage accounts. Owner/admin manages keys and audit; only owner changes existing member roles. POST auth/session enrolls an identity with zero API/Terminal grants. Provider login is unavailable until Clerk is configured.",
        "operationId": "listKeys",
        "parameters": [
          {
            "description": "UUID of an account where the signed-in user is a member; defaults to their oldest account.",
            "in": "header",
            "name": "X-Oddswire-Account",
            "required": false,
            "schema": {
              "format": "uuid",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/KeysPage"
                }
              }
            },
            "description": "Account ledger response; no-store. Key secrets appear only once on creation/rotation. Lists contain at most 100 recent entries, active keys first.",
            "headers": {
              "X-Oddswire-Credit-Cost": {
                "$ref": "#/components/headers/X-Oddswire-Credit-Cost"
              },
              "X-Oddswire-Credits-Limit": {
                "$ref": "#/components/headers/X-Oddswire-Credits-Limit"
              },
              "X-Oddswire-Credits-Remaining": {
                "$ref": "#/components/headers/X-Oddswire-Credits-Remaining"
              },
              "X-Oddswire-Credits-Reserved": {
                "$ref": "#/components/headers/X-Oddswire-Credits-Reserved"
              },
              "X-Oddswire-Credits-Reset": {
                "$ref": "#/components/headers/X-Oddswire-Credits-Reset"
              },
              "X-Oddswire-Credits-Used": {
                "$ref": "#/components/headers/X-Oddswire-Credits-Used"
              },
              "X-Oddswire-Metering": {
                "$ref": "#/components/headers/X-Oddswire-Metering"
              },
              "X-Oddswire-Overage": {
                "$ref": "#/components/headers/X-Oddswire-Overage"
              },
              "X-Oddswire-Usage-State": {
                "$ref": "#/components/headers/X-Oddswire-Usage-State"
              },
              "X-Request-ID": {
                "$ref": "#/components/headers/X-Request-ID"
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/Problem"
          },
          "401": {
            "$ref": "#/components/responses/Problem"
          },
          "403": {
            "$ref": "#/components/responses/Problem"
          },
          "404": {
            "$ref": "#/components/responses/Problem"
          },
          "405": {
            "$ref": "#/components/responses/Problem"
          },
          "409": {
            "$ref": "#/components/responses/Problem"
          },
          "422": {
            "$ref": "#/components/responses/Problem"
          },
          "429": {
            "$ref": "#/components/responses/Problem"
          },
          "500": {
            "$ref": "#/components/responses/Problem"
          },
          "503": {
            "$ref": "#/components/responses/Problem"
          },
          "504": {
            "$ref": "#/components/responses/Problem"
          }
        },
        "security": [
          {
            "AccountSession": []
          }
        ],
        "summary": "listKeys"
      },
      "post": {
        "description": "Requires an explicit Bearer Clerk session (or CLI-only local session). API keys cannot manage accounts. Owner/admin manages keys and audit; only owner changes existing member roles. POST auth/session enrolls an identity with zero API/Terminal grants. Provider login is unavailable until Clerk is configured.",
        "operationId": "createKey",
        "parameters": [
          {
            "description": "UUID of an account where the signed-in user is a member; defaults to their oldest account.",
            "in": "header",
            "name": "X-Oddswire-Account",
            "required": false,
            "schema": {
              "format": "uuid",
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/CreateKey"
              }
            }
          },
          "required": true
        },
        "responses": {
          "201": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/KeyCreatedPage"
                }
              }
            },
            "description": "Account ledger response; no-store. Key secrets appear only once on creation/rotation. Lists contain at most 100 recent entries, active keys first.",
            "headers": {
              "X-Oddswire-Credit-Cost": {
                "$ref": "#/components/headers/X-Oddswire-Credit-Cost"
              },
              "X-Oddswire-Credits-Limit": {
                "$ref": "#/components/headers/X-Oddswire-Credits-Limit"
              },
              "X-Oddswire-Credits-Remaining": {
                "$ref": "#/components/headers/X-Oddswire-Credits-Remaining"
              },
              "X-Oddswire-Credits-Reserved": {
                "$ref": "#/components/headers/X-Oddswire-Credits-Reserved"
              },
              "X-Oddswire-Credits-Reset": {
                "$ref": "#/components/headers/X-Oddswire-Credits-Reset"
              },
              "X-Oddswire-Credits-Used": {
                "$ref": "#/components/headers/X-Oddswire-Credits-Used"
              },
              "X-Oddswire-Metering": {
                "$ref": "#/components/headers/X-Oddswire-Metering"
              },
              "X-Oddswire-Overage": {
                "$ref": "#/components/headers/X-Oddswire-Overage"
              },
              "X-Oddswire-Usage-State": {
                "$ref": "#/components/headers/X-Oddswire-Usage-State"
              },
              "X-Request-ID": {
                "$ref": "#/components/headers/X-Request-ID"
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/Problem"
          },
          "401": {
            "$ref": "#/components/responses/Problem"
          },
          "403": {
            "$ref": "#/components/responses/Problem"
          },
          "404": {
            "$ref": "#/components/responses/Problem"
          },
          "405": {
            "$ref": "#/components/responses/Problem"
          },
          "409": {
            "$ref": "#/components/responses/Problem"
          },
          "422": {
            "$ref": "#/components/responses/Problem"
          },
          "429": {
            "$ref": "#/components/responses/Problem"
          },
          "500": {
            "$ref": "#/components/responses/Problem"
          },
          "503": {
            "$ref": "#/components/responses/Problem"
          },
          "504": {
            "$ref": "#/components/responses/Problem"
          }
        },
        "security": [
          {
            "AccountSession": []
          }
        ],
        "summary": "createKey"
      }
    },
    "/v1/account/keys/{key_id}": {
      "delete": {
        "description": "Requires an explicit Bearer Clerk session (or CLI-only local session). API keys cannot manage accounts. Owner/admin manages keys and audit; only owner changes existing member roles. POST auth/session enrolls an identity with zero API/Terminal grants. Provider login is unavailable until Clerk is configured.",
        "operationId": "revokeKey",
        "parameters": [
          {
            "description": "UUID of an account where the signed-in user is a member; defaults to their oldest account.",
            "in": "header",
            "name": "X-Oddswire-Account",
            "required": false,
            "schema": {
              "format": "uuid",
              "type": "string"
            }
          },
          {
            "in": "path",
            "name": "key_id",
            "required": true,
            "schema": {
              "format": "uuid",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/KeysPage"
                }
              }
            },
            "description": "Account ledger response; no-store. Key secrets appear only once on creation/rotation. Lists contain at most 100 recent entries, active keys first.",
            "headers": {
              "X-Oddswire-Credit-Cost": {
                "$ref": "#/components/headers/X-Oddswire-Credit-Cost"
              },
              "X-Oddswire-Credits-Limit": {
                "$ref": "#/components/headers/X-Oddswire-Credits-Limit"
              },
              "X-Oddswire-Credits-Remaining": {
                "$ref": "#/components/headers/X-Oddswire-Credits-Remaining"
              },
              "X-Oddswire-Credits-Reserved": {
                "$ref": "#/components/headers/X-Oddswire-Credits-Reserved"
              },
              "X-Oddswire-Credits-Reset": {
                "$ref": "#/components/headers/X-Oddswire-Credits-Reset"
              },
              "X-Oddswire-Credits-Used": {
                "$ref": "#/components/headers/X-Oddswire-Credits-Used"
              },
              "X-Oddswire-Metering": {
                "$ref": "#/components/headers/X-Oddswire-Metering"
              },
              "X-Oddswire-Overage": {
                "$ref": "#/components/headers/X-Oddswire-Overage"
              },
              "X-Oddswire-Usage-State": {
                "$ref": "#/components/headers/X-Oddswire-Usage-State"
              },
              "X-Request-ID": {
                "$ref": "#/components/headers/X-Request-ID"
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/Problem"
          },
          "401": {
            "$ref": "#/components/responses/Problem"
          },
          "403": {
            "$ref": "#/components/responses/Problem"
          },
          "404": {
            "$ref": "#/components/responses/Problem"
          },
          "405": {
            "$ref": "#/components/responses/Problem"
          },
          "409": {
            "$ref": "#/components/responses/Problem"
          },
          "422": {
            "$ref": "#/components/responses/Problem"
          },
          "429": {
            "$ref": "#/components/responses/Problem"
          },
          "500": {
            "$ref": "#/components/responses/Problem"
          },
          "503": {
            "$ref": "#/components/responses/Problem"
          },
          "504": {
            "$ref": "#/components/responses/Problem"
          }
        },
        "security": [
          {
            "AccountSession": []
          }
        ],
        "summary": "revokeKey"
      }
    },
    "/v1/account/keys/{key_id}/rotate": {
      "post": {
        "description": "Requires an explicit Bearer Clerk session (or CLI-only local session). API keys cannot manage accounts. Owner/admin manages keys and audit; only owner changes existing member roles. POST auth/session enrolls an identity with zero API/Terminal grants. Provider login is unavailable until Clerk is configured.",
        "operationId": "rotateKey",
        "parameters": [
          {
            "description": "UUID of an account where the signed-in user is a member; defaults to their oldest account.",
            "in": "header",
            "name": "X-Oddswire-Account",
            "required": false,
            "schema": {
              "format": "uuid",
              "type": "string"
            }
          },
          {
            "in": "path",
            "name": "key_id",
            "required": true,
            "schema": {
              "format": "uuid",
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/CreateKey"
              }
            }
          },
          "required": true
        },
        "responses": {
          "201": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/KeyCreatedPage"
                }
              }
            },
            "description": "Account ledger response; no-store. Key secrets appear only once on creation/rotation. Lists contain at most 100 recent entries, active keys first.",
            "headers": {
              "X-Oddswire-Credit-Cost": {
                "$ref": "#/components/headers/X-Oddswire-Credit-Cost"
              },
              "X-Oddswire-Credits-Limit": {
                "$ref": "#/components/headers/X-Oddswire-Credits-Limit"
              },
              "X-Oddswire-Credits-Remaining": {
                "$ref": "#/components/headers/X-Oddswire-Credits-Remaining"
              },
              "X-Oddswire-Credits-Reserved": {
                "$ref": "#/components/headers/X-Oddswire-Credits-Reserved"
              },
              "X-Oddswire-Credits-Reset": {
                "$ref": "#/components/headers/X-Oddswire-Credits-Reset"
              },
              "X-Oddswire-Credits-Used": {
                "$ref": "#/components/headers/X-Oddswire-Credits-Used"
              },
              "X-Oddswire-Metering": {
                "$ref": "#/components/headers/X-Oddswire-Metering"
              },
              "X-Oddswire-Overage": {
                "$ref": "#/components/headers/X-Oddswire-Overage"
              },
              "X-Oddswire-Usage-State": {
                "$ref": "#/components/headers/X-Oddswire-Usage-State"
              },
              "X-Request-ID": {
                "$ref": "#/components/headers/X-Request-ID"
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/Problem"
          },
          "401": {
            "$ref": "#/components/responses/Problem"
          },
          "403": {
            "$ref": "#/components/responses/Problem"
          },
          "404": {
            "$ref": "#/components/responses/Problem"
          },
          "405": {
            "$ref": "#/components/responses/Problem"
          },
          "409": {
            "$ref": "#/components/responses/Problem"
          },
          "422": {
            "$ref": "#/components/responses/Problem"
          },
          "429": {
            "$ref": "#/components/responses/Problem"
          },
          "500": {
            "$ref": "#/components/responses/Problem"
          },
          "503": {
            "$ref": "#/components/responses/Problem"
          },
          "504": {
            "$ref": "#/components/responses/Problem"
          }
        },
        "security": [
          {
            "AccountSession": []
          }
        ],
        "summary": "rotateKey"
      }
    },
    "/v1/account/members": {
      "get": {
        "description": "Requires an explicit Bearer Clerk session (or CLI-only local session). API keys cannot manage accounts. Owner/admin manages keys and audit; only owner changes existing member roles. POST auth/session enrolls an identity with zero API/Terminal grants. Provider login is unavailable until Clerk is configured.",
        "operationId": "listMembers",
        "parameters": [
          {
            "description": "UUID of an account where the signed-in user is a member; defaults to their oldest account.",
            "in": "header",
            "name": "X-Oddswire-Account",
            "required": false,
            "schema": {
              "format": "uuid",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/MembersPage"
                }
              }
            },
            "description": "Account ledger response; no-store. Key secrets appear only once on creation/rotation. Lists contain at most 100 recent entries, active keys first.",
            "headers": {
              "X-Oddswire-Credit-Cost": {
                "$ref": "#/components/headers/X-Oddswire-Credit-Cost"
              },
              "X-Oddswire-Credits-Limit": {
                "$ref": "#/components/headers/X-Oddswire-Credits-Limit"
              },
              "X-Oddswire-Credits-Remaining": {
                "$ref": "#/components/headers/X-Oddswire-Credits-Remaining"
              },
              "X-Oddswire-Credits-Reserved": {
                "$ref": "#/components/headers/X-Oddswire-Credits-Reserved"
              },
              "X-Oddswire-Credits-Reset": {
                "$ref": "#/components/headers/X-Oddswire-Credits-Reset"
              },
              "X-Oddswire-Credits-Used": {
                "$ref": "#/components/headers/X-Oddswire-Credits-Used"
              },
              "X-Oddswire-Metering": {
                "$ref": "#/components/headers/X-Oddswire-Metering"
              },
              "X-Oddswire-Overage": {
                "$ref": "#/components/headers/X-Oddswire-Overage"
              },
              "X-Oddswire-Usage-State": {
                "$ref": "#/components/headers/X-Oddswire-Usage-State"
              },
              "X-Request-ID": {
                "$ref": "#/components/headers/X-Request-ID"
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/Problem"
          },
          "401": {
            "$ref": "#/components/responses/Problem"
          },
          "403": {
            "$ref": "#/components/responses/Problem"
          },
          "404": {
            "$ref": "#/components/responses/Problem"
          },
          "405": {
            "$ref": "#/components/responses/Problem"
          },
          "409": {
            "$ref": "#/components/responses/Problem"
          },
          "422": {
            "$ref": "#/components/responses/Problem"
          },
          "429": {
            "$ref": "#/components/responses/Problem"
          },
          "500": {
            "$ref": "#/components/responses/Problem"
          },
          "503": {
            "$ref": "#/components/responses/Problem"
          },
          "504": {
            "$ref": "#/components/responses/Problem"
          }
        },
        "security": [
          {
            "AccountSession": []
          }
        ],
        "summary": "listMembers"
      }
    },
    "/v1/account/members/{user_id}": {
      "put": {
        "description": "Requires an explicit Bearer Clerk session (or CLI-only local session). API keys cannot manage accounts. Owner/admin manages keys and audit; only owner changes existing member roles. POST auth/session enrolls an identity with zero API/Terminal grants. Provider login is unavailable until Clerk is configured.",
        "operationId": "setMemberRole",
        "parameters": [
          {
            "description": "UUID of an account where the signed-in user is a member; defaults to their oldest account.",
            "in": "header",
            "name": "X-Oddswire-Account",
            "required": false,
            "schema": {
              "format": "uuid",
              "type": "string"
            }
          },
          {
            "in": "path",
            "name": "user_id",
            "required": true,
            "schema": {
              "format": "uuid",
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/RoleChange"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/MembersPage"
                }
              }
            },
            "description": "Account ledger response; no-store. Key secrets appear only once on creation/rotation. Lists contain at most 100 recent entries, active keys first.",
            "headers": {
              "X-Oddswire-Credit-Cost": {
                "$ref": "#/components/headers/X-Oddswire-Credit-Cost"
              },
              "X-Oddswire-Credits-Limit": {
                "$ref": "#/components/headers/X-Oddswire-Credits-Limit"
              },
              "X-Oddswire-Credits-Remaining": {
                "$ref": "#/components/headers/X-Oddswire-Credits-Remaining"
              },
              "X-Oddswire-Credits-Reserved": {
                "$ref": "#/components/headers/X-Oddswire-Credits-Reserved"
              },
              "X-Oddswire-Credits-Reset": {
                "$ref": "#/components/headers/X-Oddswire-Credits-Reset"
              },
              "X-Oddswire-Credits-Used": {
                "$ref": "#/components/headers/X-Oddswire-Credits-Used"
              },
              "X-Oddswire-Metering": {
                "$ref": "#/components/headers/X-Oddswire-Metering"
              },
              "X-Oddswire-Overage": {
                "$ref": "#/components/headers/X-Oddswire-Overage"
              },
              "X-Oddswire-Usage-State": {
                "$ref": "#/components/headers/X-Oddswire-Usage-State"
              },
              "X-Request-ID": {
                "$ref": "#/components/headers/X-Request-ID"
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/Problem"
          },
          "401": {
            "$ref": "#/components/responses/Problem"
          },
          "403": {
            "$ref": "#/components/responses/Problem"
          },
          "404": {
            "$ref": "#/components/responses/Problem"
          },
          "405": {
            "$ref": "#/components/responses/Problem"
          },
          "409": {
            "$ref": "#/components/responses/Problem"
          },
          "422": {
            "$ref": "#/components/responses/Problem"
          },
          "429": {
            "$ref": "#/components/responses/Problem"
          },
          "500": {
            "$ref": "#/components/responses/Problem"
          },
          "503": {
            "$ref": "#/components/responses/Problem"
          },
          "504": {
            "$ref": "#/components/responses/Problem"
          }
        },
        "security": [
          {
            "AccountSession": []
          }
        ],
        "summary": "setMemberRole"
      }
    },
    "/v1/account/usage": {
      "get": {
        "description": "Private local pilot with account-wide included credits. Namespace-scoped IDs; overage off. Successful data pages cost one credit; account/errors/304/aborted or timed-out deliveries are free. No payment or source distribution rights are implied.",
        "operationId": "getUsage",
        "parameters": [
          {
            "description": "Weak semantic ETag; freshness and access are revalidated before 304.",
            "in": "header",
            "name": "If-None-Match",
            "required": false,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/UsagePage"
                }
              }
            },
            "description": "A typed page. Each successful data page costs one included credit, including explicit missing/insufficient states; account introspection is free. missing[] covers the full query.",
            "headers": {
              "X-Oddswire-Credit-Cost": {
                "$ref": "#/components/headers/X-Oddswire-Credit-Cost"
              },
              "X-Oddswire-Credits-Limit": {
                "$ref": "#/components/headers/X-Oddswire-Credits-Limit"
              },
              "X-Oddswire-Credits-Remaining": {
                "$ref": "#/components/headers/X-Oddswire-Credits-Remaining"
              },
              "X-Oddswire-Credits-Reserved": {
                "$ref": "#/components/headers/X-Oddswire-Credits-Reserved"
              },
              "X-Oddswire-Credits-Reset": {
                "$ref": "#/components/headers/X-Oddswire-Credits-Reset"
              },
              "X-Oddswire-Credits-Used": {
                "$ref": "#/components/headers/X-Oddswire-Credits-Used"
              },
              "X-Oddswire-Metering": {
                "$ref": "#/components/headers/X-Oddswire-Metering"
              },
              "X-Oddswire-Overage": {
                "$ref": "#/components/headers/X-Oddswire-Overage"
              },
              "X-Oddswire-Usage-State": {
                "$ref": "#/components/headers/X-Oddswire-Usage-State"
              },
              "X-Request-ID": {
                "$ref": "#/components/headers/X-Request-ID"
              }
            }
          },
          "304": {
            "description": "Semantically unchanged after authentication and eligibility validation; always zero credits, including at exhausted quota.",
            "headers": {
              "X-Oddswire-Credit-Cost": {
                "$ref": "#/components/headers/X-Oddswire-Credit-Cost"
              },
              "X-Oddswire-Credits-Limit": {
                "$ref": "#/components/headers/X-Oddswire-Credits-Limit"
              },
              "X-Oddswire-Credits-Remaining": {
                "$ref": "#/components/headers/X-Oddswire-Credits-Remaining"
              },
              "X-Oddswire-Credits-Reserved": {
                "$ref": "#/components/headers/X-Oddswire-Credits-Reserved"
              },
              "X-Oddswire-Credits-Reset": {
                "$ref": "#/components/headers/X-Oddswire-Credits-Reset"
              },
              "X-Oddswire-Credits-Used": {
                "$ref": "#/components/headers/X-Oddswire-Credits-Used"
              },
              "X-Oddswire-Metering": {
                "$ref": "#/components/headers/X-Oddswire-Metering"
              },
              "X-Oddswire-Overage": {
                "$ref": "#/components/headers/X-Oddswire-Overage"
              },
              "X-Oddswire-Usage-State": {
                "$ref": "#/components/headers/X-Oddswire-Usage-State"
              },
              "X-Request-ID": {
                "$ref": "#/components/headers/X-Request-ID"
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/Problem"
          },
          "401": {
            "$ref": "#/components/responses/Problem"
          },
          "402": {
            "$ref": "#/components/responses/Problem"
          },
          "403": {
            "$ref": "#/components/responses/Problem"
          },
          "404": {
            "$ref": "#/components/responses/Problem"
          },
          "405": {
            "$ref": "#/components/responses/Problem"
          },
          "409": {
            "$ref": "#/components/responses/Problem"
          },
          "414": {
            "$ref": "#/components/responses/Problem"
          },
          "422": {
            "$ref": "#/components/responses/Problem"
          },
          "429": {
            "$ref": "#/components/responses/Problem"
          },
          "500": {
            "$ref": "#/components/responses/Problem"
          },
          "503": {
            "$ref": "#/components/responses/Problem"
          },
          "504": {
            "$ref": "#/components/responses/Problem"
          }
        },
        "security": [
          {
            "ApiKey": []
          },
          {
            "AccountSession": []
          }
        ],
        "summary": "getUsage"
      }
    },
    "/v1/account/webhook-targets": {
      "get": {
        "description": "Owner/admin session only; API keys and viewers cannot manage alerts. Control calls and outbound attempts use no REST credits. Separate alerts/odds grants, account-owned key, expiring alerts purpose review and current source access are required for rules and dispatch. POST request_id is an account-wide UUID idempotency key; retry identical content. Signing secrets appear once, including after rotation; duplicate mutation responses omit them. No external delivery is enabled automatically.",
        "operationId": "listWebhookTargets",
        "parameters": [
          {
            "description": "UUID of an account where the signed-in user is a member; defaults to their oldest account.",
            "in": "header",
            "name": "X-Oddswire-Account",
            "required": false,
            "schema": {
              "format": "uuid",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/AlertTargetsPage"
                }
              }
            },
            "description": "Account ledger response; no-store. Key secrets appear only once on creation/rotation. Lists contain at most 100 recent entries, active keys first.",
            "headers": {
              "X-Oddswire-Credit-Cost": {
                "$ref": "#/components/headers/X-Oddswire-Credit-Cost"
              },
              "X-Oddswire-Credits-Limit": {
                "$ref": "#/components/headers/X-Oddswire-Credits-Limit"
              },
              "X-Oddswire-Credits-Remaining": {
                "$ref": "#/components/headers/X-Oddswire-Credits-Remaining"
              },
              "X-Oddswire-Credits-Reserved": {
                "$ref": "#/components/headers/X-Oddswire-Credits-Reserved"
              },
              "X-Oddswire-Credits-Reset": {
                "$ref": "#/components/headers/X-Oddswire-Credits-Reset"
              },
              "X-Oddswire-Credits-Used": {
                "$ref": "#/components/headers/X-Oddswire-Credits-Used"
              },
              "X-Oddswire-Metering": {
                "$ref": "#/components/headers/X-Oddswire-Metering"
              },
              "X-Oddswire-Overage": {
                "$ref": "#/components/headers/X-Oddswire-Overage"
              },
              "X-Oddswire-Usage-State": {
                "$ref": "#/components/headers/X-Oddswire-Usage-State"
              },
              "X-Request-ID": {
                "$ref": "#/components/headers/X-Request-ID"
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/Problem"
          },
          "401": {
            "$ref": "#/components/responses/Problem"
          },
          "403": {
            "$ref": "#/components/responses/Problem"
          },
          "404": {
            "$ref": "#/components/responses/Problem"
          },
          "405": {
            "$ref": "#/components/responses/Problem"
          },
          "409": {
            "$ref": "#/components/responses/Problem"
          },
          "422": {
            "$ref": "#/components/responses/Problem"
          },
          "429": {
            "$ref": "#/components/responses/Problem"
          },
          "500": {
            "$ref": "#/components/responses/Problem"
          },
          "503": {
            "$ref": "#/components/responses/Problem"
          },
          "504": {
            "$ref": "#/components/responses/Problem"
          }
        },
        "security": [
          {
            "AccountSession": []
          }
        ],
        "summary": "listWebhookTargets"
      },
      "post": {
        "description": "Owner/admin session only; API keys and viewers cannot manage alerts. Control calls and outbound attempts use no REST credits. Separate alerts/odds grants, account-owned key, expiring alerts purpose review and current source access are required for rules and dispatch. POST request_id is an account-wide UUID idempotency key; retry identical content. Signing secrets appear once, including after rotation; duplicate mutation responses omit them. No external delivery is enabled automatically.",
        "operationId": "createWebhookTarget",
        "parameters": [
          {
            "description": "UUID of an account where the signed-in user is a member; defaults to their oldest account.",
            "in": "header",
            "name": "X-Oddswire-Account",
            "required": false,
            "schema": {
              "format": "uuid",
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/AlertTargetInput"
              }
            }
          },
          "required": true
        },
        "responses": {
          "201": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/AlertTargetCreatedPage"
                }
              }
            },
            "description": "Account ledger response; no-store. Key secrets appear only once on creation/rotation. Lists contain at most 100 recent entries, active keys first.",
            "headers": {
              "X-Oddswire-Credit-Cost": {
                "$ref": "#/components/headers/X-Oddswire-Credit-Cost"
              },
              "X-Oddswire-Credits-Limit": {
                "$ref": "#/components/headers/X-Oddswire-Credits-Limit"
              },
              "X-Oddswire-Credits-Remaining": {
                "$ref": "#/components/headers/X-Oddswire-Credits-Remaining"
              },
              "X-Oddswire-Credits-Reserved": {
                "$ref": "#/components/headers/X-Oddswire-Credits-Reserved"
              },
              "X-Oddswire-Credits-Reset": {
                "$ref": "#/components/headers/X-Oddswire-Credits-Reset"
              },
              "X-Oddswire-Credits-Used": {
                "$ref": "#/components/headers/X-Oddswire-Credits-Used"
              },
              "X-Oddswire-Metering": {
                "$ref": "#/components/headers/X-Oddswire-Metering"
              },
              "X-Oddswire-Overage": {
                "$ref": "#/components/headers/X-Oddswire-Overage"
              },
              "X-Oddswire-Usage-State": {
                "$ref": "#/components/headers/X-Oddswire-Usage-State"
              },
              "X-Request-ID": {
                "$ref": "#/components/headers/X-Request-ID"
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/Problem"
          },
          "401": {
            "$ref": "#/components/responses/Problem"
          },
          "403": {
            "$ref": "#/components/responses/Problem"
          },
          "404": {
            "$ref": "#/components/responses/Problem"
          },
          "405": {
            "$ref": "#/components/responses/Problem"
          },
          "409": {
            "$ref": "#/components/responses/Problem"
          },
          "422": {
            "$ref": "#/components/responses/Problem"
          },
          "429": {
            "$ref": "#/components/responses/Problem"
          },
          "500": {
            "$ref": "#/components/responses/Problem"
          },
          "503": {
            "$ref": "#/components/responses/Problem"
          },
          "504": {
            "$ref": "#/components/responses/Problem"
          }
        },
        "security": [
          {
            "AccountSession": []
          }
        ],
        "summary": "createWebhookTarget"
      }
    },
    "/v1/account/webhook-targets/{target_id}/disable": {
      "post": {
        "description": "Owner/admin session only; API keys and viewers cannot manage alerts. Control calls and outbound attempts use no REST credits. Separate alerts/odds grants, account-owned key, expiring alerts purpose review and current source access are required for rules and dispatch. POST request_id is an account-wide UUID idempotency key; retry identical content. Signing secrets appear once, including after rotation; duplicate mutation responses omit them. No external delivery is enabled automatically.",
        "operationId": "disableWebhookTarget",
        "parameters": [
          {
            "description": "UUID of an account where the signed-in user is a member; defaults to their oldest account.",
            "in": "header",
            "name": "X-Oddswire-Account",
            "required": false,
            "schema": {
              "format": "uuid",
              "type": "string"
            }
          },
          {
            "in": "path",
            "name": "target_id",
            "required": true,
            "schema": {
              "format": "uuid",
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/AlertMutation"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/AlertTargetCreatedPage"
                }
              }
            },
            "description": "Account ledger response; no-store. Key secrets appear only once on creation/rotation. Lists contain at most 100 recent entries, active keys first.",
            "headers": {
              "X-Oddswire-Credit-Cost": {
                "$ref": "#/components/headers/X-Oddswire-Credit-Cost"
              },
              "X-Oddswire-Credits-Limit": {
                "$ref": "#/components/headers/X-Oddswire-Credits-Limit"
              },
              "X-Oddswire-Credits-Remaining": {
                "$ref": "#/components/headers/X-Oddswire-Credits-Remaining"
              },
              "X-Oddswire-Credits-Reserved": {
                "$ref": "#/components/headers/X-Oddswire-Credits-Reserved"
              },
              "X-Oddswire-Credits-Reset": {
                "$ref": "#/components/headers/X-Oddswire-Credits-Reset"
              },
              "X-Oddswire-Credits-Used": {
                "$ref": "#/components/headers/X-Oddswire-Credits-Used"
              },
              "X-Oddswire-Metering": {
                "$ref": "#/components/headers/X-Oddswire-Metering"
              },
              "X-Oddswire-Overage": {
                "$ref": "#/components/headers/X-Oddswire-Overage"
              },
              "X-Oddswire-Usage-State": {
                "$ref": "#/components/headers/X-Oddswire-Usage-State"
              },
              "X-Request-ID": {
                "$ref": "#/components/headers/X-Request-ID"
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/Problem"
          },
          "401": {
            "$ref": "#/components/responses/Problem"
          },
          "403": {
            "$ref": "#/components/responses/Problem"
          },
          "404": {
            "$ref": "#/components/responses/Problem"
          },
          "405": {
            "$ref": "#/components/responses/Problem"
          },
          "409": {
            "$ref": "#/components/responses/Problem"
          },
          "422": {
            "$ref": "#/components/responses/Problem"
          },
          "429": {
            "$ref": "#/components/responses/Problem"
          },
          "500": {
            "$ref": "#/components/responses/Problem"
          },
          "503": {
            "$ref": "#/components/responses/Problem"
          },
          "504": {
            "$ref": "#/components/responses/Problem"
          }
        },
        "security": [
          {
            "AccountSession": []
          }
        ],
        "summary": "disableWebhookTarget"
      }
    },
    "/v1/account/webhook-targets/{target_id}/rotate": {
      "post": {
        "description": "Owner/admin session only; API keys and viewers cannot manage alerts. Control calls and outbound attempts use no REST credits. Separate alerts/odds grants, account-owned key, expiring alerts purpose review and current source access are required for rules and dispatch. POST request_id is an account-wide UUID idempotency key; retry identical content. Signing secrets appear once, including after rotation; duplicate mutation responses omit them. No external delivery is enabled automatically.",
        "operationId": "rotateWebhookTarget",
        "parameters": [
          {
            "description": "UUID of an account where the signed-in user is a member; defaults to their oldest account.",
            "in": "header",
            "name": "X-Oddswire-Account",
            "required": false,
            "schema": {
              "format": "uuid",
              "type": "string"
            }
          },
          {
            "in": "path",
            "name": "target_id",
            "required": true,
            "schema": {
              "format": "uuid",
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/AlertMutation"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/AlertTargetCreatedPage"
                }
              }
            },
            "description": "Account ledger response; no-store. Key secrets appear only once on creation/rotation. Lists contain at most 100 recent entries, active keys first.",
            "headers": {
              "X-Oddswire-Credit-Cost": {
                "$ref": "#/components/headers/X-Oddswire-Credit-Cost"
              },
              "X-Oddswire-Credits-Limit": {
                "$ref": "#/components/headers/X-Oddswire-Credits-Limit"
              },
              "X-Oddswire-Credits-Remaining": {
                "$ref": "#/components/headers/X-Oddswire-Credits-Remaining"
              },
              "X-Oddswire-Credits-Reserved": {
                "$ref": "#/components/headers/X-Oddswire-Credits-Reserved"
              },
              "X-Oddswire-Credits-Reset": {
                "$ref": "#/components/headers/X-Oddswire-Credits-Reset"
              },
              "X-Oddswire-Credits-Used": {
                "$ref": "#/components/headers/X-Oddswire-Credits-Used"
              },
              "X-Oddswire-Metering": {
                "$ref": "#/components/headers/X-Oddswire-Metering"
              },
              "X-Oddswire-Overage": {
                "$ref": "#/components/headers/X-Oddswire-Overage"
              },
              "X-Oddswire-Usage-State": {
                "$ref": "#/components/headers/X-Oddswire-Usage-State"
              },
              "X-Request-ID": {
                "$ref": "#/components/headers/X-Request-ID"
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/Problem"
          },
          "401": {
            "$ref": "#/components/responses/Problem"
          },
          "403": {
            "$ref": "#/components/responses/Problem"
          },
          "404": {
            "$ref": "#/components/responses/Problem"
          },
          "405": {
            "$ref": "#/components/responses/Problem"
          },
          "409": {
            "$ref": "#/components/responses/Problem"
          },
          "422": {
            "$ref": "#/components/responses/Problem"
          },
          "429": {
            "$ref": "#/components/responses/Problem"
          },
          "500": {
            "$ref": "#/components/responses/Problem"
          },
          "503": {
            "$ref": "#/components/responses/Problem"
          },
          "504": {
            "$ref": "#/components/responses/Problem"
          }
        },
        "security": [
          {
            "AccountSession": []
          }
        ],
        "summary": "rotateWebhookTarget"
      }
    },
    "/v1/admin/beta": {
      "get": {
        "description": "Invite-only personal API beta. Signup grants no data access. Acceptance requires the exact enrolled identity/account, approved region and acknowledgment. Source permissions, expiry and environment are revalidated on data reads. Global beta administration requires a separately provisioned operator, not a customer owner/admin. Invitations are shown once and never placed in URLs. Notices are local previews only; billing/Terminal are separate.",
        "operationId": "reportBeta",
        "parameters": [
          {
            "description": "UUID of an account where the signed-in user is a member; defaults to their oldest account.",
            "in": "header",
            "name": "X-Oddswire-Account",
            "required": false,
            "schema": {
              "format": "uuid",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/BetaReportPage"
                }
              }
            },
            "description": "Account ledger response; no-store. Key secrets appear only once on creation/rotation. Lists contain at most 100 recent entries, active keys first.",
            "headers": {
              "X-Oddswire-Credit-Cost": {
                "$ref": "#/components/headers/X-Oddswire-Credit-Cost"
              },
              "X-Oddswire-Credits-Limit": {
                "$ref": "#/components/headers/X-Oddswire-Credits-Limit"
              },
              "X-Oddswire-Credits-Remaining": {
                "$ref": "#/components/headers/X-Oddswire-Credits-Remaining"
              },
              "X-Oddswire-Credits-Reserved": {
                "$ref": "#/components/headers/X-Oddswire-Credits-Reserved"
              },
              "X-Oddswire-Credits-Reset": {
                "$ref": "#/components/headers/X-Oddswire-Credits-Reset"
              },
              "X-Oddswire-Credits-Used": {
                "$ref": "#/components/headers/X-Oddswire-Credits-Used"
              },
              "X-Oddswire-Metering": {
                "$ref": "#/components/headers/X-Oddswire-Metering"
              },
              "X-Oddswire-Overage": {
                "$ref": "#/components/headers/X-Oddswire-Overage"
              },
              "X-Oddswire-Usage-State": {
                "$ref": "#/components/headers/X-Oddswire-Usage-State"
              },
              "X-Request-ID": {
                "$ref": "#/components/headers/X-Request-ID"
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/Problem"
          },
          "401": {
            "$ref": "#/components/responses/Problem"
          },
          "403": {
            "$ref": "#/components/responses/Problem"
          },
          "404": {
            "$ref": "#/components/responses/Problem"
          },
          "405": {
            "$ref": "#/components/responses/Problem"
          },
          "409": {
            "$ref": "#/components/responses/Problem"
          },
          "422": {
            "$ref": "#/components/responses/Problem"
          },
          "429": {
            "$ref": "#/components/responses/Problem"
          },
          "500": {
            "$ref": "#/components/responses/Problem"
          },
          "503": {
            "$ref": "#/components/responses/Problem"
          },
          "504": {
            "$ref": "#/components/responses/Problem"
          }
        },
        "security": [
          {
            "AccountSession": []
          }
        ],
        "summary": "reportBeta"
      }
    },
    "/v1/admin/beta/invites": {
      "post": {
        "description": "Invite-only personal API beta. Signup grants no data access. Acceptance requires the exact enrolled identity/account, approved region and acknowledgment. Source permissions, expiry and environment are revalidated on data reads. Global beta administration requires a separately provisioned operator, not a customer owner/admin. Invitations are shown once and never placed in URLs. Notices are local previews only; billing/Terminal are separate.",
        "operationId": "inviteBeta",
        "parameters": [
          {
            "description": "UUID of an account where the signed-in user is a member; defaults to their oldest account.",
            "in": "header",
            "name": "X-Oddswire-Account",
            "required": false,
            "schema": {
              "format": "uuid",
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/BetaInviteInput"
              }
            }
          },
          "required": true
        },
        "responses": {
          "201": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/BetaInviteCreatedPage"
                }
              }
            },
            "description": "Account ledger response; no-store. Key secrets appear only once on creation/rotation. Lists contain at most 100 recent entries, active keys first.",
            "headers": {
              "X-Oddswire-Credit-Cost": {
                "$ref": "#/components/headers/X-Oddswire-Credit-Cost"
              },
              "X-Oddswire-Credits-Limit": {
                "$ref": "#/components/headers/X-Oddswire-Credits-Limit"
              },
              "X-Oddswire-Credits-Remaining": {
                "$ref": "#/components/headers/X-Oddswire-Credits-Remaining"
              },
              "X-Oddswire-Credits-Reserved": {
                "$ref": "#/components/headers/X-Oddswire-Credits-Reserved"
              },
              "X-Oddswire-Credits-Reset": {
                "$ref": "#/components/headers/X-Oddswire-Credits-Reset"
              },
              "X-Oddswire-Credits-Used": {
                "$ref": "#/components/headers/X-Oddswire-Credits-Used"
              },
              "X-Oddswire-Metering": {
                "$ref": "#/components/headers/X-Oddswire-Metering"
              },
              "X-Oddswire-Overage": {
                "$ref": "#/components/headers/X-Oddswire-Overage"
              },
              "X-Oddswire-Usage-State": {
                "$ref": "#/components/headers/X-Oddswire-Usage-State"
              },
              "X-Request-ID": {
                "$ref": "#/components/headers/X-Request-ID"
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/Problem"
          },
          "401": {
            "$ref": "#/components/responses/Problem"
          },
          "403": {
            "$ref": "#/components/responses/Problem"
          },
          "404": {
            "$ref": "#/components/responses/Problem"
          },
          "405": {
            "$ref": "#/components/responses/Problem"
          },
          "409": {
            "$ref": "#/components/responses/Problem"
          },
          "422": {
            "$ref": "#/components/responses/Problem"
          },
          "429": {
            "$ref": "#/components/responses/Problem"
          },
          "500": {
            "$ref": "#/components/responses/Problem"
          },
          "503": {
            "$ref": "#/components/responses/Problem"
          },
          "504": {
            "$ref": "#/components/responses/Problem"
          }
        },
        "security": [
          {
            "AccountSession": []
          }
        ],
        "summary": "inviteBeta"
      }
    },
    "/v1/admin/beta/invites/{invite_id}/revoke": {
      "post": {
        "description": "Invite-only personal API beta. Signup grants no data access. Acceptance requires the exact enrolled identity/account, approved region and acknowledgment. Source permissions, expiry and environment are revalidated on data reads. Global beta administration requires a separately provisioned operator, not a customer owner/admin. Invitations are shown once and never placed in URLs. Notices are local previews only; billing/Terminal are separate.",
        "operationId": "revokeBeta",
        "parameters": [
          {
            "description": "UUID of an account where the signed-in user is a member; defaults to their oldest account.",
            "in": "header",
            "name": "X-Oddswire-Account",
            "required": false,
            "schema": {
              "format": "uuid",
              "type": "string"
            }
          },
          {
            "in": "path",
            "name": "invite_id",
            "required": true,
            "schema": {
              "format": "uuid",
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/BetaRevoke"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/BetaReportPage"
                }
              }
            },
            "description": "Account ledger response; no-store. Key secrets appear only once on creation/rotation. Lists contain at most 100 recent entries, active keys first.",
            "headers": {
              "X-Oddswire-Credit-Cost": {
                "$ref": "#/components/headers/X-Oddswire-Credit-Cost"
              },
              "X-Oddswire-Credits-Limit": {
                "$ref": "#/components/headers/X-Oddswire-Credits-Limit"
              },
              "X-Oddswire-Credits-Remaining": {
                "$ref": "#/components/headers/X-Oddswire-Credits-Remaining"
              },
              "X-Oddswire-Credits-Reserved": {
                "$ref": "#/components/headers/X-Oddswire-Credits-Reserved"
              },
              "X-Oddswire-Credits-Reset": {
                "$ref": "#/components/headers/X-Oddswire-Credits-Reset"
              },
              "X-Oddswire-Credits-Used": {
                "$ref": "#/components/headers/X-Oddswire-Credits-Used"
              },
              "X-Oddswire-Metering": {
                "$ref": "#/components/headers/X-Oddswire-Metering"
              },
              "X-Oddswire-Overage": {
                "$ref": "#/components/headers/X-Oddswire-Overage"
              },
              "X-Oddswire-Usage-State": {
                "$ref": "#/components/headers/X-Oddswire-Usage-State"
              },
              "X-Request-ID": {
                "$ref": "#/components/headers/X-Request-ID"
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/Problem"
          },
          "401": {
            "$ref": "#/components/responses/Problem"
          },
          "403": {
            "$ref": "#/components/responses/Problem"
          },
          "404": {
            "$ref": "#/components/responses/Problem"
          },
          "405": {
            "$ref": "#/components/responses/Problem"
          },
          "409": {
            "$ref": "#/components/responses/Problem"
          },
          "422": {
            "$ref": "#/components/responses/Problem"
          },
          "429": {
            "$ref": "#/components/responses/Problem"
          },
          "500": {
            "$ref": "#/components/responses/Problem"
          },
          "503": {
            "$ref": "#/components/responses/Problem"
          },
          "504": {
            "$ref": "#/components/responses/Problem"
          }
        },
        "security": [
          {
            "AccountSession": []
          }
        ],
        "summary": "revokeBeta"
      }
    },
    "/v1/admin/beta/sources": {
      "put": {
        "description": "Invite-only personal API beta. Signup grants no data access. Acceptance requires the exact enrolled identity/account, approved region and acknowledgment. Source permissions, expiry and environment are revalidated on data reads. Global beta administration requires a separately provisioned operator, not a customer owner/admin. Invitations are shown once and never placed in URLs. Notices are local previews only; billing/Terminal are separate.",
        "operationId": "reviewBetaSource",
        "parameters": [
          {
            "description": "UUID of an account where the signed-in user is a member; defaults to their oldest account.",
            "in": "header",
            "name": "X-Oddswire-Account",
            "required": false,
            "schema": {
              "format": "uuid",
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/BetaPermission"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/BetaReportPage"
                }
              }
            },
            "description": "Account ledger response; no-store. Key secrets appear only once on creation/rotation. Lists contain at most 100 recent entries, active keys first.",
            "headers": {
              "X-Oddswire-Credit-Cost": {
                "$ref": "#/components/headers/X-Oddswire-Credit-Cost"
              },
              "X-Oddswire-Credits-Limit": {
                "$ref": "#/components/headers/X-Oddswire-Credits-Limit"
              },
              "X-Oddswire-Credits-Remaining": {
                "$ref": "#/components/headers/X-Oddswire-Credits-Remaining"
              },
              "X-Oddswire-Credits-Reserved": {
                "$ref": "#/components/headers/X-Oddswire-Credits-Reserved"
              },
              "X-Oddswire-Credits-Reset": {
                "$ref": "#/components/headers/X-Oddswire-Credits-Reset"
              },
              "X-Oddswire-Credits-Used": {
                "$ref": "#/components/headers/X-Oddswire-Credits-Used"
              },
              "X-Oddswire-Metering": {
                "$ref": "#/components/headers/X-Oddswire-Metering"
              },
              "X-Oddswire-Overage": {
                "$ref": "#/components/headers/X-Oddswire-Overage"
              },
              "X-Oddswire-Usage-State": {
                "$ref": "#/components/headers/X-Oddswire-Usage-State"
              },
              "X-Request-ID": {
                "$ref": "#/components/headers/X-Request-ID"
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/Problem"
          },
          "401": {
            "$ref": "#/components/responses/Problem"
          },
          "403": {
            "$ref": "#/components/responses/Problem"
          },
          "404": {
            "$ref": "#/components/responses/Problem"
          },
          "405": {
            "$ref": "#/components/responses/Problem"
          },
          "409": {
            "$ref": "#/components/responses/Problem"
          },
          "422": {
            "$ref": "#/components/responses/Problem"
          },
          "429": {
            "$ref": "#/components/responses/Problem"
          },
          "500": {
            "$ref": "#/components/responses/Problem"
          },
          "503": {
            "$ref": "#/components/responses/Problem"
          },
          "504": {
            "$ref": "#/components/responses/Problem"
          }
        },
        "security": [
          {
            "AccountSession": []
          }
        ],
        "summary": "reviewBetaSource"
      }
    },
    "/v1/auth/session": {
      "delete": {
        "description": "Requires an explicit Bearer Clerk session (or CLI-only local session). API keys cannot manage accounts. Owner/admin manages keys and audit; only owner changes existing member roles. POST auth/session enrolls an identity with zero API/Terminal grants. Provider login is unavailable until Clerk is configured.",
        "operationId": "endLocalSession",
        "parameters": [
          {
            "description": "UUID of an account where the signed-in user is a member; defaults to their oldest account.",
            "in": "header",
            "name": "X-Oddswire-Account",
            "required": false,
            "schema": {
              "format": "uuid",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/AccountPage"
                }
              }
            },
            "description": "Account ledger response; no-store. Key secrets appear only once on creation/rotation. Lists contain at most 100 recent entries, active keys first.",
            "headers": {
              "X-Oddswire-Credit-Cost": {
                "$ref": "#/components/headers/X-Oddswire-Credit-Cost"
              },
              "X-Oddswire-Credits-Limit": {
                "$ref": "#/components/headers/X-Oddswire-Credits-Limit"
              },
              "X-Oddswire-Credits-Remaining": {
                "$ref": "#/components/headers/X-Oddswire-Credits-Remaining"
              },
              "X-Oddswire-Credits-Reserved": {
                "$ref": "#/components/headers/X-Oddswire-Credits-Reserved"
              },
              "X-Oddswire-Credits-Reset": {
                "$ref": "#/components/headers/X-Oddswire-Credits-Reset"
              },
              "X-Oddswire-Credits-Used": {
                "$ref": "#/components/headers/X-Oddswire-Credits-Used"
              },
              "X-Oddswire-Metering": {
                "$ref": "#/components/headers/X-Oddswire-Metering"
              },
              "X-Oddswire-Overage": {
                "$ref": "#/components/headers/X-Oddswire-Overage"
              },
              "X-Oddswire-Usage-State": {
                "$ref": "#/components/headers/X-Oddswire-Usage-State"
              },
              "X-Request-ID": {
                "$ref": "#/components/headers/X-Request-ID"
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/Problem"
          },
          "401": {
            "$ref": "#/components/responses/Problem"
          },
          "403": {
            "$ref": "#/components/responses/Problem"
          },
          "404": {
            "$ref": "#/components/responses/Problem"
          },
          "405": {
            "$ref": "#/components/responses/Problem"
          },
          "409": {
            "$ref": "#/components/responses/Problem"
          },
          "422": {
            "$ref": "#/components/responses/Problem"
          },
          "429": {
            "$ref": "#/components/responses/Problem"
          },
          "500": {
            "$ref": "#/components/responses/Problem"
          },
          "503": {
            "$ref": "#/components/responses/Problem"
          },
          "504": {
            "$ref": "#/components/responses/Problem"
          }
        },
        "security": [
          {
            "AccountSession": []
          }
        ],
        "summary": "endLocalSession"
      },
      "post": {
        "description": "Requires an explicit Bearer Clerk session (or CLI-only local session). API keys cannot manage accounts. Owner/admin manages keys and audit; only owner changes existing member roles. POST auth/session enrolls an identity with zero API/Terminal grants. Provider login is unavailable until Clerk is configured.",
        "operationId": "enrollSession",
        "parameters": [
          {
            "description": "UUID of an account where the signed-in user is a member; defaults to their oldest account.",
            "in": "header",
            "name": "X-Oddswire-Account",
            "required": false,
            "schema": {
              "format": "uuid",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/AccountPage"
                }
              }
            },
            "description": "Account ledger response; no-store. Key secrets appear only once on creation/rotation. Lists contain at most 100 recent entries, active keys first.",
            "headers": {
              "X-Oddswire-Credit-Cost": {
                "$ref": "#/components/headers/X-Oddswire-Credit-Cost"
              },
              "X-Oddswire-Credits-Limit": {
                "$ref": "#/components/headers/X-Oddswire-Credits-Limit"
              },
              "X-Oddswire-Credits-Remaining": {
                "$ref": "#/components/headers/X-Oddswire-Credits-Remaining"
              },
              "X-Oddswire-Credits-Reserved": {
                "$ref": "#/components/headers/X-Oddswire-Credits-Reserved"
              },
              "X-Oddswire-Credits-Reset": {
                "$ref": "#/components/headers/X-Oddswire-Credits-Reset"
              },
              "X-Oddswire-Credits-Used": {
                "$ref": "#/components/headers/X-Oddswire-Credits-Used"
              },
              "X-Oddswire-Metering": {
                "$ref": "#/components/headers/X-Oddswire-Metering"
              },
              "X-Oddswire-Overage": {
                "$ref": "#/components/headers/X-Oddswire-Overage"
              },
              "X-Oddswire-Usage-State": {
                "$ref": "#/components/headers/X-Oddswire-Usage-State"
              },
              "X-Request-ID": {
                "$ref": "#/components/headers/X-Request-ID"
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/Problem"
          },
          "401": {
            "$ref": "#/components/responses/Problem"
          },
          "403": {
            "$ref": "#/components/responses/Problem"
          },
          "404": {
            "$ref": "#/components/responses/Problem"
          },
          "405": {
            "$ref": "#/components/responses/Problem"
          },
          "409": {
            "$ref": "#/components/responses/Problem"
          },
          "422": {
            "$ref": "#/components/responses/Problem"
          },
          "429": {
            "$ref": "#/components/responses/Problem"
          },
          "500": {
            "$ref": "#/components/responses/Problem"
          },
          "503": {
            "$ref": "#/components/responses/Problem"
          },
          "504": {
            "$ref": "#/components/responses/Problem"
          }
        },
        "security": [
          {
            "AccountSession": []
          }
        ],
        "summary": "enrollSession"
      }
    },
    "/v1/billing/webhook": {
      "post": {
        "operationId": "stripeWebhook",
        "parameters": [
          {
            "in": "header",
            "name": "Stripe-Signature",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "type": "object"
              }
            }
          },
          "required": true
        },
        "responses": {
          "202": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/WebhookReceipt"
                }
              }
            },
            "description": "Durably accepted; fulfillment is asynchronous reconciliation."
          },
          "400": {
            "$ref": "#/components/responses/Problem"
          },
          "409": {
            "$ref": "#/components/responses/Problem"
          },
          "413": {
            "$ref": "#/components/responses/Problem"
          },
          "503": {
            "$ref": "#/components/responses/Problem"
          }
        },
        "security": [],
        "summary": "Signed test-mode Stripe inbox receipt"
      }
    },
    "/v1/bookmakers": {
      "get": {
        "description": "Private local pilot with account-wide included credits. Namespace-scoped IDs; overage off. Successful data pages cost one credit; account/errors/304/aborted or timed-out deliveries are free. No payment or source distribution rights are implied.",
        "operationId": "listSources",
        "parameters": [
          {
            "description": "Explicit pilot namespace; numeric IDs are scoped to it.",
            "in": "query",
            "name": "namespace",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Page size 1..100; default 25.",
            "in": "query",
            "name": "limit",
            "required": false,
            "schema": {
              "default": 25,
              "maximum": 100,
              "minimum": 1,
              "type": "integer"
            }
          },
          {
            "description": "Opaque query-bound cursor; restart on 409 after data changes.",
            "in": "query",
            "name": "cursor",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Weak semantic ETag; freshness and access are revalidated before 304.",
            "in": "header",
            "name": "If-None-Match",
            "required": false,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/SourcesPage"
                }
              }
            },
            "description": "A typed page. Each successful data page costs one included credit, including explicit missing/insufficient states; account introspection is free. missing[] covers the full query.",
            "headers": {
              "X-Oddswire-Credit-Cost": {
                "$ref": "#/components/headers/X-Oddswire-Credit-Cost"
              },
              "X-Oddswire-Credits-Limit": {
                "$ref": "#/components/headers/X-Oddswire-Credits-Limit"
              },
              "X-Oddswire-Credits-Remaining": {
                "$ref": "#/components/headers/X-Oddswire-Credits-Remaining"
              },
              "X-Oddswire-Credits-Reserved": {
                "$ref": "#/components/headers/X-Oddswire-Credits-Reserved"
              },
              "X-Oddswire-Credits-Reset": {
                "$ref": "#/components/headers/X-Oddswire-Credits-Reset"
              },
              "X-Oddswire-Credits-Used": {
                "$ref": "#/components/headers/X-Oddswire-Credits-Used"
              },
              "X-Oddswire-Metering": {
                "$ref": "#/components/headers/X-Oddswire-Metering"
              },
              "X-Oddswire-Overage": {
                "$ref": "#/components/headers/X-Oddswire-Overage"
              },
              "X-Oddswire-Usage-State": {
                "$ref": "#/components/headers/X-Oddswire-Usage-State"
              },
              "X-Request-ID": {
                "$ref": "#/components/headers/X-Request-ID"
              }
            }
          },
          "304": {
            "description": "Semantically unchanged after authentication and eligibility validation; always zero credits, including at exhausted quota.",
            "headers": {
              "X-Oddswire-Credit-Cost": {
                "$ref": "#/components/headers/X-Oddswire-Credit-Cost"
              },
              "X-Oddswire-Credits-Limit": {
                "$ref": "#/components/headers/X-Oddswire-Credits-Limit"
              },
              "X-Oddswire-Credits-Remaining": {
                "$ref": "#/components/headers/X-Oddswire-Credits-Remaining"
              },
              "X-Oddswire-Credits-Reserved": {
                "$ref": "#/components/headers/X-Oddswire-Credits-Reserved"
              },
              "X-Oddswire-Credits-Reset": {
                "$ref": "#/components/headers/X-Oddswire-Credits-Reset"
              },
              "X-Oddswire-Credits-Used": {
                "$ref": "#/components/headers/X-Oddswire-Credits-Used"
              },
              "X-Oddswire-Metering": {
                "$ref": "#/components/headers/X-Oddswire-Metering"
              },
              "X-Oddswire-Overage": {
                "$ref": "#/components/headers/X-Oddswire-Overage"
              },
              "X-Oddswire-Usage-State": {
                "$ref": "#/components/headers/X-Oddswire-Usage-State"
              },
              "X-Request-ID": {
                "$ref": "#/components/headers/X-Request-ID"
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/Problem"
          },
          "401": {
            "$ref": "#/components/responses/Problem"
          },
          "402": {
            "$ref": "#/components/responses/Problem"
          },
          "403": {
            "$ref": "#/components/responses/Problem"
          },
          "404": {
            "$ref": "#/components/responses/Problem"
          },
          "405": {
            "$ref": "#/components/responses/Problem"
          },
          "409": {
            "$ref": "#/components/responses/Problem"
          },
          "414": {
            "$ref": "#/components/responses/Problem"
          },
          "422": {
            "$ref": "#/components/responses/Problem"
          },
          "429": {
            "$ref": "#/components/responses/Problem"
          },
          "500": {
            "$ref": "#/components/responses/Problem"
          },
          "503": {
            "$ref": "#/components/responses/Problem"
          },
          "504": {
            "$ref": "#/components/responses/Problem"
          }
        },
        "security": [
          {
            "ApiKey": []
          }
        ],
        "summary": "listSources"
      }
    },
    "/v1/competitions": {
      "get": {
        "description": "Private local pilot with account-wide included credits. Namespace-scoped IDs; overage off. Successful data pages cost one credit; account/errors/304/aborted or timed-out deliveries are free. No payment or source distribution rights are implied.",
        "operationId": "listCompetitions",
        "parameters": [
          {
            "description": "Explicit pilot namespace; numeric IDs are scoped to it.",
            "in": "query",
            "name": "namespace",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Page size 1..100; default 25.",
            "in": "query",
            "name": "limit",
            "required": false,
            "schema": {
              "default": 25,
              "maximum": 100,
              "minimum": 1,
              "type": "integer"
            }
          },
          {
            "description": "Opaque query-bound cursor; restart on 409 after data changes.",
            "in": "query",
            "name": "cursor",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Comma-separated sport IDs.",
            "in": "query",
            "name": "sport",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Weak semantic ETag; freshness and access are revalidated before 304.",
            "in": "header",
            "name": "If-None-Match",
            "required": false,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/CompetitionsPage"
                }
              }
            },
            "description": "A typed page. Each successful data page costs one included credit, including explicit missing/insufficient states; account introspection is free. missing[] covers the full query.",
            "headers": {
              "X-Oddswire-Credit-Cost": {
                "$ref": "#/components/headers/X-Oddswire-Credit-Cost"
              },
              "X-Oddswire-Credits-Limit": {
                "$ref": "#/components/headers/X-Oddswire-Credits-Limit"
              },
              "X-Oddswire-Credits-Remaining": {
                "$ref": "#/components/headers/X-Oddswire-Credits-Remaining"
              },
              "X-Oddswire-Credits-Reserved": {
                "$ref": "#/components/headers/X-Oddswire-Credits-Reserved"
              },
              "X-Oddswire-Credits-Reset": {
                "$ref": "#/components/headers/X-Oddswire-Credits-Reset"
              },
              "X-Oddswire-Credits-Used": {
                "$ref": "#/components/headers/X-Oddswire-Credits-Used"
              },
              "X-Oddswire-Metering": {
                "$ref": "#/components/headers/X-Oddswire-Metering"
              },
              "X-Oddswire-Overage": {
                "$ref": "#/components/headers/X-Oddswire-Overage"
              },
              "X-Oddswire-Usage-State": {
                "$ref": "#/components/headers/X-Oddswire-Usage-State"
              },
              "X-Request-ID": {
                "$ref": "#/components/headers/X-Request-ID"
              }
            }
          },
          "304": {
            "description": "Semantically unchanged after authentication and eligibility validation; always zero credits, including at exhausted quota.",
            "headers": {
              "X-Oddswire-Credit-Cost": {
                "$ref": "#/components/headers/X-Oddswire-Credit-Cost"
              },
              "X-Oddswire-Credits-Limit": {
                "$ref": "#/components/headers/X-Oddswire-Credits-Limit"
              },
              "X-Oddswire-Credits-Remaining": {
                "$ref": "#/components/headers/X-Oddswire-Credits-Remaining"
              },
              "X-Oddswire-Credits-Reserved": {
                "$ref": "#/components/headers/X-Oddswire-Credits-Reserved"
              },
              "X-Oddswire-Credits-Reset": {
                "$ref": "#/components/headers/X-Oddswire-Credits-Reset"
              },
              "X-Oddswire-Credits-Used": {
                "$ref": "#/components/headers/X-Oddswire-Credits-Used"
              },
              "X-Oddswire-Metering": {
                "$ref": "#/components/headers/X-Oddswire-Metering"
              },
              "X-Oddswire-Overage": {
                "$ref": "#/components/headers/X-Oddswire-Overage"
              },
              "X-Oddswire-Usage-State": {
                "$ref": "#/components/headers/X-Oddswire-Usage-State"
              },
              "X-Request-ID": {
                "$ref": "#/components/headers/X-Request-ID"
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/Problem"
          },
          "401": {
            "$ref": "#/components/responses/Problem"
          },
          "402": {
            "$ref": "#/components/responses/Problem"
          },
          "403": {
            "$ref": "#/components/responses/Problem"
          },
          "404": {
            "$ref": "#/components/responses/Problem"
          },
          "405": {
            "$ref": "#/components/responses/Problem"
          },
          "409": {
            "$ref": "#/components/responses/Problem"
          },
          "414": {
            "$ref": "#/components/responses/Problem"
          },
          "422": {
            "$ref": "#/components/responses/Problem"
          },
          "429": {
            "$ref": "#/components/responses/Problem"
          },
          "500": {
            "$ref": "#/components/responses/Problem"
          },
          "503": {
            "$ref": "#/components/responses/Problem"
          },
          "504": {
            "$ref": "#/components/responses/Problem"
          }
        },
        "security": [
          {
            "ApiKey": []
          }
        ],
        "summary": "listCompetitions"
      }
    },
    "/v1/fair": {
      "get": {
        "description": "Private local pilot with account-wide included credits. Namespace-scoped IDs; overage off. Successful data pages cost one credit; account/errors/304/aborted or timed-out deliveries are free. No payment or source distribution rights are implied.",
        "operationId": "getFair",
        "parameters": [
          {
            "description": "Explicit pilot namespace; numeric IDs are scoped to it.",
            "in": "query",
            "name": "namespace",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "One reviewed group fixture ID.",
            "in": "query",
            "name": "fixture",
            "required": true,
            "schema": {
              "maximum": 9007199254740991,
              "minimum": 1,
              "type": "integer"
            }
          },
          {
            "description": "Exactly one payout family; default 1x2.",
            "in": "query",
            "name": "markets",
            "required": false,
            "schema": {
              "enum": [
                "1x2",
                "total",
                "asian_handicap"
              ],
              "type": "string"
            }
          },
          {
            "description": "Market period; unsupported payout periods yield insufficient_reference.",
            "in": "query",
            "name": "period",
            "required": false,
            "schema": {
              "enum": [
                "full_time",
                "first_half"
              ],
              "type": "string"
            }
          },
          {
            "description": "Margin removal method.",
            "in": "query",
            "name": "method",
            "required": false,
            "schema": {
              "enum": [
                "multiplicative",
                "power"
              ],
              "type": "string"
            }
          },
          {
            "description": "Exact target settlement identity; never inferred across brands.",
            "in": "query",
            "name": "settlement_rule",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Required for totals/AH; absent for 1x2.",
            "in": "query",
            "name": "line_quarters",
            "required": false,
            "schema": {
              "type": "integer"
            }
          },
          {
            "description": "Weak semantic ETag; freshness and access are revalidated before 304.",
            "in": "header",
            "name": "If-None-Match",
            "required": false,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/FairPage"
                }
              }
            },
            "description": "A typed page. Each successful data page costs one included credit, including explicit missing/insufficient states; account introspection is free. missing[] covers the full query.",
            "headers": {
              "X-Oddswire-Credit-Cost": {
                "$ref": "#/components/headers/X-Oddswire-Credit-Cost"
              },
              "X-Oddswire-Credits-Limit": {
                "$ref": "#/components/headers/X-Oddswire-Credits-Limit"
              },
              "X-Oddswire-Credits-Remaining": {
                "$ref": "#/components/headers/X-Oddswire-Credits-Remaining"
              },
              "X-Oddswire-Credits-Reserved": {
                "$ref": "#/components/headers/X-Oddswire-Credits-Reserved"
              },
              "X-Oddswire-Credits-Reset": {
                "$ref": "#/components/headers/X-Oddswire-Credits-Reset"
              },
              "X-Oddswire-Credits-Used": {
                "$ref": "#/components/headers/X-Oddswire-Credits-Used"
              },
              "X-Oddswire-Metering": {
                "$ref": "#/components/headers/X-Oddswire-Metering"
              },
              "X-Oddswire-Overage": {
                "$ref": "#/components/headers/X-Oddswire-Overage"
              },
              "X-Oddswire-Usage-State": {
                "$ref": "#/components/headers/X-Oddswire-Usage-State"
              },
              "X-Request-ID": {
                "$ref": "#/components/headers/X-Request-ID"
              }
            }
          },
          "304": {
            "description": "Semantically unchanged after authentication and eligibility validation; always zero credits, including at exhausted quota.",
            "headers": {
              "X-Oddswire-Credit-Cost": {
                "$ref": "#/components/headers/X-Oddswire-Credit-Cost"
              },
              "X-Oddswire-Credits-Limit": {
                "$ref": "#/components/headers/X-Oddswire-Credits-Limit"
              },
              "X-Oddswire-Credits-Remaining": {
                "$ref": "#/components/headers/X-Oddswire-Credits-Remaining"
              },
              "X-Oddswire-Credits-Reserved": {
                "$ref": "#/components/headers/X-Oddswire-Credits-Reserved"
              },
              "X-Oddswire-Credits-Reset": {
                "$ref": "#/components/headers/X-Oddswire-Credits-Reset"
              },
              "X-Oddswire-Credits-Used": {
                "$ref": "#/components/headers/X-Oddswire-Credits-Used"
              },
              "X-Oddswire-Metering": {
                "$ref": "#/components/headers/X-Oddswire-Metering"
              },
              "X-Oddswire-Overage": {
                "$ref": "#/components/headers/X-Oddswire-Overage"
              },
              "X-Oddswire-Usage-State": {
                "$ref": "#/components/headers/X-Oddswire-Usage-State"
              },
              "X-Request-ID": {
                "$ref": "#/components/headers/X-Request-ID"
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/Problem"
          },
          "401": {
            "$ref": "#/components/responses/Problem"
          },
          "402": {
            "$ref": "#/components/responses/Problem"
          },
          "403": {
            "$ref": "#/components/responses/Problem"
          },
          "404": {
            "$ref": "#/components/responses/Problem"
          },
          "405": {
            "$ref": "#/components/responses/Problem"
          },
          "409": {
            "$ref": "#/components/responses/Problem"
          },
          "414": {
            "$ref": "#/components/responses/Problem"
          },
          "422": {
            "$ref": "#/components/responses/Problem"
          },
          "429": {
            "$ref": "#/components/responses/Problem"
          },
          "500": {
            "$ref": "#/components/responses/Problem"
          },
          "503": {
            "$ref": "#/components/responses/Problem"
          },
          "504": {
            "$ref": "#/components/responses/Problem"
          }
        },
        "security": [
          {
            "ApiKey": []
          }
        ],
        "summary": "getFair"
      }
    },
    "/v1/fixtures": {
      "get": {
        "description": "Private local pilot with account-wide included credits. Namespace-scoped IDs; overage off. Successful data pages cost one credit; account/errors/304/aborted or timed-out deliveries are free. No payment or source distribution rights are implied.",
        "operationId": "listFixtures",
        "parameters": [
          {
            "description": "Explicit pilot namespace; numeric IDs are scoped to it.",
            "in": "query",
            "name": "namespace",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Page size 1..100; default 25.",
            "in": "query",
            "name": "limit",
            "required": false,
            "schema": {
              "default": 25,
              "maximum": 100,
              "minimum": 1,
              "type": "integer"
            }
          },
          {
            "description": "Opaque query-bound cursor; restart on 409 after data changes.",
            "in": "query",
            "name": "cursor",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Comma-separated namespace-scoped fixture/group IDs (max 25).",
            "in": "query",
            "name": "fixture",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Comma-separated competition IDs.",
            "in": "query",
            "name": "competition",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Comma-separated sport IDs.",
            "in": "query",
            "name": "sport",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Source/region IDs, not brand IDs (comma separated).",
            "in": "query",
            "name": "books",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Inclusive UTC-normalized RFC3339 kickoff bound.",
            "in": "query",
            "name": "from",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Exclusive RFC3339 kickoff bound.",
            "in": "query",
            "name": "to",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Stored fixture state.",
            "in": "query",
            "name": "status",
            "required": false,
            "schema": {
              "enum": [
                "scheduled",
                "live",
                "ended",
                "cancelled"
              ],
              "type": "string"
            }
          },
          {
            "description": "Weak semantic ETag; freshness and access are revalidated before 304.",
            "in": "header",
            "name": "If-None-Match",
            "required": false,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/FixturesPage"
                }
              }
            },
            "description": "A typed page. Each successful data page costs one included credit, including explicit missing/insufficient states; account introspection is free. missing[] covers the full query.",
            "headers": {
              "X-Oddswire-Credit-Cost": {
                "$ref": "#/components/headers/X-Oddswire-Credit-Cost"
              },
              "X-Oddswire-Credits-Limit": {
                "$ref": "#/components/headers/X-Oddswire-Credits-Limit"
              },
              "X-Oddswire-Credits-Remaining": {
                "$ref": "#/components/headers/X-Oddswire-Credits-Remaining"
              },
              "X-Oddswire-Credits-Reserved": {
                "$ref": "#/components/headers/X-Oddswire-Credits-Reserved"
              },
              "X-Oddswire-Credits-Reset": {
                "$ref": "#/components/headers/X-Oddswire-Credits-Reset"
              },
              "X-Oddswire-Credits-Used": {
                "$ref": "#/components/headers/X-Oddswire-Credits-Used"
              },
              "X-Oddswire-Metering": {
                "$ref": "#/components/headers/X-Oddswire-Metering"
              },
              "X-Oddswire-Overage": {
                "$ref": "#/components/headers/X-Oddswire-Overage"
              },
              "X-Oddswire-Usage-State": {
                "$ref": "#/components/headers/X-Oddswire-Usage-State"
              },
              "X-Request-ID": {
                "$ref": "#/components/headers/X-Request-ID"
              }
            }
          },
          "304": {
            "description": "Semantically unchanged after authentication and eligibility validation; always zero credits, including at exhausted quota.",
            "headers": {
              "X-Oddswire-Credit-Cost": {
                "$ref": "#/components/headers/X-Oddswire-Credit-Cost"
              },
              "X-Oddswire-Credits-Limit": {
                "$ref": "#/components/headers/X-Oddswire-Credits-Limit"
              },
              "X-Oddswire-Credits-Remaining": {
                "$ref": "#/components/headers/X-Oddswire-Credits-Remaining"
              },
              "X-Oddswire-Credits-Reserved": {
                "$ref": "#/components/headers/X-Oddswire-Credits-Reserved"
              },
              "X-Oddswire-Credits-Reset": {
                "$ref": "#/components/headers/X-Oddswire-Credits-Reset"
              },
              "X-Oddswire-Credits-Used": {
                "$ref": "#/components/headers/X-Oddswire-Credits-Used"
              },
              "X-Oddswire-Metering": {
                "$ref": "#/components/headers/X-Oddswire-Metering"
              },
              "X-Oddswire-Overage": {
                "$ref": "#/components/headers/X-Oddswire-Overage"
              },
              "X-Oddswire-Usage-State": {
                "$ref": "#/components/headers/X-Oddswire-Usage-State"
              },
              "X-Request-ID": {
                "$ref": "#/components/headers/X-Request-ID"
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/Problem"
          },
          "401": {
            "$ref": "#/components/responses/Problem"
          },
          "402": {
            "$ref": "#/components/responses/Problem"
          },
          "403": {
            "$ref": "#/components/responses/Problem"
          },
          "404": {
            "$ref": "#/components/responses/Problem"
          },
          "405": {
            "$ref": "#/components/responses/Problem"
          },
          "409": {
            "$ref": "#/components/responses/Problem"
          },
          "414": {
            "$ref": "#/components/responses/Problem"
          },
          "422": {
            "$ref": "#/components/responses/Problem"
          },
          "429": {
            "$ref": "#/components/responses/Problem"
          },
          "500": {
            "$ref": "#/components/responses/Problem"
          },
          "503": {
            "$ref": "#/components/responses/Problem"
          },
          "504": {
            "$ref": "#/components/responses/Problem"
          }
        },
        "security": [
          {
            "ApiKey": []
          }
        ],
        "summary": "listFixtures"
      }
    },
    "/v1/history/coverage": {
      "get": {
        "description": "Private local pilot with account-wide included credits. Namespace-scoped IDs; overage off. Successful data pages cost one credit; account/errors/304/aborted or timed-out deliveries are free. No payment or source distribution rights are implied.",
        "operationId": "getHistoryCoverage",
        "parameters": [
          {
            "description": "Explicit namespace; history IDs are permanent source-local IDs.",
            "in": "query",
            "name": "namespace",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "One to eight entitled source/region IDs.",
            "in": "query",
            "name": "books",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "One to ten permanent source-local canonical fixture IDs from mappings.native_fixture_id. Not the upstream source_fixture_id or reviewed group ID.",
            "in": "query",
            "name": "native_fixture_id",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Comma-separated native payout families; default current entitled families.",
            "in": "query",
            "name": "markets",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Page size 1..100; coverage remains present on every page.",
            "in": "query",
            "name": "limit",
            "required": false,
            "schema": {
              "default": 25,
              "maximum": 100,
              "minimum": 1,
              "type": "integer"
            }
          },
          {
            "description": "Opaque whole-query fingerprint; restart explicitly after 409.",
            "in": "query",
            "name": "cursor",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Inclusive received seen_ts; required for ticks/coverage.",
            "in": "query",
            "name": "from",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Exclusive received seen_ts; required for ticks/coverage; maximum 31-day interval.",
            "in": "query",
            "name": "until",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Weak semantic ETag; freshness and access are revalidated before 304.",
            "in": "header",
            "name": "If-None-Match",
            "required": false,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HistoryPage"
                }
              }
            },
            "description": "Free bounded PG evidence coverage, not a continuous-coverage or whole-sink audit. Explicit history grants/reviews required.",
            "headers": {
              "X-Oddswire-Credit-Cost": {
                "$ref": "#/components/headers/X-Oddswire-Credit-Cost"
              },
              "X-Oddswire-Credits-Limit": {
                "$ref": "#/components/headers/X-Oddswire-Credits-Limit"
              },
              "X-Oddswire-Credits-Remaining": {
                "$ref": "#/components/headers/X-Oddswire-Credits-Remaining"
              },
              "X-Oddswire-Credits-Reserved": {
                "$ref": "#/components/headers/X-Oddswire-Credits-Reserved"
              },
              "X-Oddswire-Credits-Reset": {
                "$ref": "#/components/headers/X-Oddswire-Credits-Reset"
              },
              "X-Oddswire-Credits-Used": {
                "$ref": "#/components/headers/X-Oddswire-Credits-Used"
              },
              "X-Oddswire-Metering": {
                "$ref": "#/components/headers/X-Oddswire-Metering"
              },
              "X-Oddswire-Overage": {
                "$ref": "#/components/headers/X-Oddswire-Overage"
              },
              "X-Oddswire-Usage-State": {
                "$ref": "#/components/headers/X-Oddswire-Usage-State"
              },
              "X-Request-ID": {
                "$ref": "#/components/headers/X-Request-ID"
              }
            }
          },
          "304": {
            "description": "Semantically unchanged after authentication and eligibility validation; always zero credits, including at exhausted quota.",
            "headers": {
              "X-Oddswire-Credit-Cost": {
                "$ref": "#/components/headers/X-Oddswire-Credit-Cost"
              },
              "X-Oddswire-Credits-Limit": {
                "$ref": "#/components/headers/X-Oddswire-Credits-Limit"
              },
              "X-Oddswire-Credits-Remaining": {
                "$ref": "#/components/headers/X-Oddswire-Credits-Remaining"
              },
              "X-Oddswire-Credits-Reserved": {
                "$ref": "#/components/headers/X-Oddswire-Credits-Reserved"
              },
              "X-Oddswire-Credits-Reset": {
                "$ref": "#/components/headers/X-Oddswire-Credits-Reset"
              },
              "X-Oddswire-Credits-Used": {
                "$ref": "#/components/headers/X-Oddswire-Credits-Used"
              },
              "X-Oddswire-Metering": {
                "$ref": "#/components/headers/X-Oddswire-Metering"
              },
              "X-Oddswire-Overage": {
                "$ref": "#/components/headers/X-Oddswire-Overage"
              },
              "X-Oddswire-Usage-State": {
                "$ref": "#/components/headers/X-Oddswire-Usage-State"
              },
              "X-Request-ID": {
                "$ref": "#/components/headers/X-Request-ID"
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/Problem"
          },
          "401": {
            "$ref": "#/components/responses/Problem"
          },
          "402": {
            "$ref": "#/components/responses/Problem"
          },
          "403": {
            "$ref": "#/components/responses/Problem"
          },
          "404": {
            "$ref": "#/components/responses/Problem"
          },
          "405": {
            "$ref": "#/components/responses/Problem"
          },
          "409": {
            "$ref": "#/components/responses/Problem"
          },
          "414": {
            "$ref": "#/components/responses/Problem"
          },
          "422": {
            "$ref": "#/components/responses/Problem"
          },
          "429": {
            "$ref": "#/components/responses/Problem"
          },
          "500": {
            "$ref": "#/components/responses/Problem"
          },
          "503": {
            "$ref": "#/components/responses/Problem"
          },
          "504": {
            "$ref": "#/components/responses/Problem"
          }
        },
        "security": [
          {
            "ApiKey": []
          }
        ],
        "summary": "getHistoryCoverage"
      }
    },
    "/v1/history/export": {
      "get": {
        "description": "Private local pilot with account-wide included credits. Namespace-scoped IDs; overage off. Successful data pages cost one credit; account/errors/304/aborted or timed-out deliveries are free. No payment or source distribution rights are implied.",
        "operationId": "exportHistory",
        "parameters": [
          {
            "description": "Explicit namespace; history IDs are permanent source-local IDs.",
            "in": "query",
            "name": "namespace",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "One to eight entitled source/region IDs.",
            "in": "query",
            "name": "books",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "One to ten permanent source-local canonical fixture IDs from mappings.native_fixture_id. Not the upstream source_fixture_id or reviewed group ID.",
            "in": "query",
            "name": "native_fixture_id",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Comma-separated native payout families; default current entitled families.",
            "in": "query",
            "name": "markets",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Inclusive received seen_ts; required for ticks/coverage.",
            "in": "query",
            "name": "from",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Exclusive received seen_ts; required for ticks/coverage; maximum 31-day interval.",
            "in": "query",
            "name": "until",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Inclusive recorded confirmation cutoff. Required for snapshots/lines, cannot be in the future.",
            "in": "query",
            "name": "as_of",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Explicit scheduled kickoff; closing uses strictly earlier confirmations. Required for lines.",
            "in": "query",
            "name": "scheduled_start",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Entire bounded selection; no implicit paging or asynchronous job.",
            "in": "query",
            "name": "kind",
            "required": true,
            "schema": {
              "enum": [
                "ticks",
                "snapshot",
                "lines"
              ],
              "type": "string"
            }
          },
          {
            "description": "One complete bounded file; one credit after successful delivery.",
            "in": "query",
            "name": "format",
            "required": true,
            "schema": {
              "enum": [
                "csv",
                "parquet"
              ],
              "type": "string"
            }
          },
          {
            "description": "Weak semantic ETag; freshness and access are revalidated before 304.",
            "in": "header",
            "name": "If-None-Match",
            "required": false,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/vnd.apache.parquet": {
                "schema": {
                  "format": "binary",
                  "type": "string"
                }
              },
              "text/csv": {
                "schema": {
                  "format": "binary",
                  "type": "string"
                }
              }
            },
            "description": "Complete bounded CSV or Parquet file with embedded coverage manifest. Requires both history and history_export plus current account/source/region/purpose reviews. One credit on completed successful delivery; errors and 304 free.",
            "headers": {
              "X-Oddswire-Credit-Cost": {
                "$ref": "#/components/headers/X-Oddswire-Credit-Cost"
              },
              "X-Oddswire-Credits-Limit": {
                "$ref": "#/components/headers/X-Oddswire-Credits-Limit"
              },
              "X-Oddswire-Credits-Remaining": {
                "$ref": "#/components/headers/X-Oddswire-Credits-Remaining"
              },
              "X-Oddswire-Credits-Reserved": {
                "$ref": "#/components/headers/X-Oddswire-Credits-Reserved"
              },
              "X-Oddswire-Credits-Reset": {
                "$ref": "#/components/headers/X-Oddswire-Credits-Reset"
              },
              "X-Oddswire-Credits-Used": {
                "$ref": "#/components/headers/X-Oddswire-Credits-Used"
              },
              "X-Oddswire-Metering": {
                "$ref": "#/components/headers/X-Oddswire-Metering"
              },
              "X-Oddswire-Overage": {
                "$ref": "#/components/headers/X-Oddswire-Overage"
              },
              "X-Oddswire-Usage-State": {
                "$ref": "#/components/headers/X-Oddswire-Usage-State"
              },
              "X-Request-ID": {
                "$ref": "#/components/headers/X-Request-ID"
              }
            }
          },
          "304": {
            "description": "Semantically unchanged after authentication and eligibility validation; always zero credits, including at exhausted quota.",
            "headers": {
              "X-Oddswire-Credit-Cost": {
                "$ref": "#/components/headers/X-Oddswire-Credit-Cost"
              },
              "X-Oddswire-Credits-Limit": {
                "$ref": "#/components/headers/X-Oddswire-Credits-Limit"
              },
              "X-Oddswire-Credits-Remaining": {
                "$ref": "#/components/headers/X-Oddswire-Credits-Remaining"
              },
              "X-Oddswire-Credits-Reserved": {
                "$ref": "#/components/headers/X-Oddswire-Credits-Reserved"
              },
              "X-Oddswire-Credits-Reset": {
                "$ref": "#/components/headers/X-Oddswire-Credits-Reset"
              },
              "X-Oddswire-Credits-Used": {
                "$ref": "#/components/headers/X-Oddswire-Credits-Used"
              },
              "X-Oddswire-Metering": {
                "$ref": "#/components/headers/X-Oddswire-Metering"
              },
              "X-Oddswire-Overage": {
                "$ref": "#/components/headers/X-Oddswire-Overage"
              },
              "X-Oddswire-Usage-State": {
                "$ref": "#/components/headers/X-Oddswire-Usage-State"
              },
              "X-Request-ID": {
                "$ref": "#/components/headers/X-Request-ID"
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/Problem"
          },
          "401": {
            "$ref": "#/components/responses/Problem"
          },
          "402": {
            "$ref": "#/components/responses/Problem"
          },
          "403": {
            "$ref": "#/components/responses/Problem"
          },
          "404": {
            "$ref": "#/components/responses/Problem"
          },
          "405": {
            "$ref": "#/components/responses/Problem"
          },
          "409": {
            "$ref": "#/components/responses/Problem"
          },
          "414": {
            "$ref": "#/components/responses/Problem"
          },
          "422": {
            "$ref": "#/components/responses/Problem"
          },
          "429": {
            "$ref": "#/components/responses/Problem"
          },
          "500": {
            "$ref": "#/components/responses/Problem"
          },
          "503": {
            "$ref": "#/components/responses/Problem"
          },
          "504": {
            "$ref": "#/components/responses/Problem"
          }
        },
        "security": [
          {
            "ApiKey": []
          }
        ],
        "summary": "exportHistory"
      }
    },
    "/v1/history/lines": {
      "get": {
        "description": "Private local pilot with account-wide included credits. Namespace-scoped IDs; overage off. Successful data pages cost one credit; account/errors/304/aborted or timed-out deliveries are free. No payment or source distribution rights are implied.",
        "operationId": "getHistoryLines",
        "parameters": [
          {
            "description": "Explicit namespace; history IDs are permanent source-local IDs.",
            "in": "query",
            "name": "namespace",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "One to eight entitled source/region IDs.",
            "in": "query",
            "name": "books",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "One to ten permanent source-local canonical fixture IDs from mappings.native_fixture_id. Not the upstream source_fixture_id or reviewed group ID.",
            "in": "query",
            "name": "native_fixture_id",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Comma-separated native payout families; default current entitled families.",
            "in": "query",
            "name": "markets",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Page size 1..100; coverage remains present on every page.",
            "in": "query",
            "name": "limit",
            "required": false,
            "schema": {
              "default": 25,
              "maximum": 100,
              "minimum": 1,
              "type": "integer"
            }
          },
          {
            "description": "Opaque whole-query fingerprint; restart explicitly after 409.",
            "in": "query",
            "name": "cursor",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Inclusive recorded confirmation cutoff. Required for snapshots/lines, cannot be in the future.",
            "in": "query",
            "name": "as_of",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Explicit scheduled kickoff; closing uses strictly earlier confirmations. Required for lines.",
            "in": "query",
            "name": "scheduled_start",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Weak semantic ETag; freshness and access are revalidated before 304.",
            "in": "header",
            "name": "If-None-Match",
            "required": false,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HistoryPage"
                }
              }
            },
            "description": "A typed page. Each successful data page costs one included credit, including explicit missing/insufficient states; account introspection is free. missing[] covers the full query.",
            "headers": {
              "X-Oddswire-Credit-Cost": {
                "$ref": "#/components/headers/X-Oddswire-Credit-Cost"
              },
              "X-Oddswire-Credits-Limit": {
                "$ref": "#/components/headers/X-Oddswire-Credits-Limit"
              },
              "X-Oddswire-Credits-Remaining": {
                "$ref": "#/components/headers/X-Oddswire-Credits-Remaining"
              },
              "X-Oddswire-Credits-Reserved": {
                "$ref": "#/components/headers/X-Oddswire-Credits-Reserved"
              },
              "X-Oddswire-Credits-Reset": {
                "$ref": "#/components/headers/X-Oddswire-Credits-Reset"
              },
              "X-Oddswire-Credits-Used": {
                "$ref": "#/components/headers/X-Oddswire-Credits-Used"
              },
              "X-Oddswire-Metering": {
                "$ref": "#/components/headers/X-Oddswire-Metering"
              },
              "X-Oddswire-Overage": {
                "$ref": "#/components/headers/X-Oddswire-Overage"
              },
              "X-Oddswire-Usage-State": {
                "$ref": "#/components/headers/X-Oddswire-Usage-State"
              },
              "X-Request-ID": {
                "$ref": "#/components/headers/X-Request-ID"
              }
            }
          },
          "304": {
            "description": "Semantically unchanged after authentication and eligibility validation; always zero credits, including at exhausted quota.",
            "headers": {
              "X-Oddswire-Credit-Cost": {
                "$ref": "#/components/headers/X-Oddswire-Credit-Cost"
              },
              "X-Oddswire-Credits-Limit": {
                "$ref": "#/components/headers/X-Oddswire-Credits-Limit"
              },
              "X-Oddswire-Credits-Remaining": {
                "$ref": "#/components/headers/X-Oddswire-Credits-Remaining"
              },
              "X-Oddswire-Credits-Reserved": {
                "$ref": "#/components/headers/X-Oddswire-Credits-Reserved"
              },
              "X-Oddswire-Credits-Reset": {
                "$ref": "#/components/headers/X-Oddswire-Credits-Reset"
              },
              "X-Oddswire-Credits-Used": {
                "$ref": "#/components/headers/X-Oddswire-Credits-Used"
              },
              "X-Oddswire-Metering": {
                "$ref": "#/components/headers/X-Oddswire-Metering"
              },
              "X-Oddswire-Overage": {
                "$ref": "#/components/headers/X-Oddswire-Overage"
              },
              "X-Oddswire-Usage-State": {
                "$ref": "#/components/headers/X-Oddswire-Usage-State"
              },
              "X-Request-ID": {
                "$ref": "#/components/headers/X-Request-ID"
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/Problem"
          },
          "401": {
            "$ref": "#/components/responses/Problem"
          },
          "402": {
            "$ref": "#/components/responses/Problem"
          },
          "403": {
            "$ref": "#/components/responses/Problem"
          },
          "404": {
            "$ref": "#/components/responses/Problem"
          },
          "405": {
            "$ref": "#/components/responses/Problem"
          },
          "409": {
            "$ref": "#/components/responses/Problem"
          },
          "414": {
            "$ref": "#/components/responses/Problem"
          },
          "422": {
            "$ref": "#/components/responses/Problem"
          },
          "429": {
            "$ref": "#/components/responses/Problem"
          },
          "500": {
            "$ref": "#/components/responses/Problem"
          },
          "503": {
            "$ref": "#/components/responses/Problem"
          },
          "504": {
            "$ref": "#/components/responses/Problem"
          }
        },
        "security": [
          {
            "ApiKey": []
          }
        ],
        "summary": "getHistoryLines"
      }
    },
    "/v1/history/snapshot": {
      "get": {
        "description": "Private local pilot with account-wide included credits. Namespace-scoped IDs; overage off. Successful data pages cost one credit; account/errors/304/aborted or timed-out deliveries are free. No payment or source distribution rights are implied.",
        "operationId": "getHistorySnapshot",
        "parameters": [
          {
            "description": "Explicit namespace; history IDs are permanent source-local IDs.",
            "in": "query",
            "name": "namespace",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "One to eight entitled source/region IDs.",
            "in": "query",
            "name": "books",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "One to ten permanent source-local canonical fixture IDs from mappings.native_fixture_id. Not the upstream source_fixture_id or reviewed group ID.",
            "in": "query",
            "name": "native_fixture_id",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Comma-separated native payout families; default current entitled families.",
            "in": "query",
            "name": "markets",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Page size 1..100; coverage remains present on every page.",
            "in": "query",
            "name": "limit",
            "required": false,
            "schema": {
              "default": 25,
              "maximum": 100,
              "minimum": 1,
              "type": "integer"
            }
          },
          {
            "description": "Opaque whole-query fingerprint; restart explicitly after 409.",
            "in": "query",
            "name": "cursor",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Inclusive recorded confirmation cutoff. Required for snapshots/lines, cannot be in the future.",
            "in": "query",
            "name": "as_of",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Weak semantic ETag; freshness and access are revalidated before 304.",
            "in": "header",
            "name": "If-None-Match",
            "required": false,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HistoryPage"
                }
              }
            },
            "description": "A typed page. Each successful data page costs one included credit, including explicit missing/insufficient states; account introspection is free. missing[] covers the full query.",
            "headers": {
              "X-Oddswire-Credit-Cost": {
                "$ref": "#/components/headers/X-Oddswire-Credit-Cost"
              },
              "X-Oddswire-Credits-Limit": {
                "$ref": "#/components/headers/X-Oddswire-Credits-Limit"
              },
              "X-Oddswire-Credits-Remaining": {
                "$ref": "#/components/headers/X-Oddswire-Credits-Remaining"
              },
              "X-Oddswire-Credits-Reserved": {
                "$ref": "#/components/headers/X-Oddswire-Credits-Reserved"
              },
              "X-Oddswire-Credits-Reset": {
                "$ref": "#/components/headers/X-Oddswire-Credits-Reset"
              },
              "X-Oddswire-Credits-Used": {
                "$ref": "#/components/headers/X-Oddswire-Credits-Used"
              },
              "X-Oddswire-Metering": {
                "$ref": "#/components/headers/X-Oddswire-Metering"
              },
              "X-Oddswire-Overage": {
                "$ref": "#/components/headers/X-Oddswire-Overage"
              },
              "X-Oddswire-Usage-State": {
                "$ref": "#/components/headers/X-Oddswire-Usage-State"
              },
              "X-Request-ID": {
                "$ref": "#/components/headers/X-Request-ID"
              }
            }
          },
          "304": {
            "description": "Semantically unchanged after authentication and eligibility validation; always zero credits, including at exhausted quota.",
            "headers": {
              "X-Oddswire-Credit-Cost": {
                "$ref": "#/components/headers/X-Oddswire-Credit-Cost"
              },
              "X-Oddswire-Credits-Limit": {
                "$ref": "#/components/headers/X-Oddswire-Credits-Limit"
              },
              "X-Oddswire-Credits-Remaining": {
                "$ref": "#/components/headers/X-Oddswire-Credits-Remaining"
              },
              "X-Oddswire-Credits-Reserved": {
                "$ref": "#/components/headers/X-Oddswire-Credits-Reserved"
              },
              "X-Oddswire-Credits-Reset": {
                "$ref": "#/components/headers/X-Oddswire-Credits-Reset"
              },
              "X-Oddswire-Credits-Used": {
                "$ref": "#/components/headers/X-Oddswire-Credits-Used"
              },
              "X-Oddswire-Metering": {
                "$ref": "#/components/headers/X-Oddswire-Metering"
              },
              "X-Oddswire-Overage": {
                "$ref": "#/components/headers/X-Oddswire-Overage"
              },
              "X-Oddswire-Usage-State": {
                "$ref": "#/components/headers/X-Oddswire-Usage-State"
              },
              "X-Request-ID": {
                "$ref": "#/components/headers/X-Request-ID"
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/Problem"
          },
          "401": {
            "$ref": "#/components/responses/Problem"
          },
          "402": {
            "$ref": "#/components/responses/Problem"
          },
          "403": {
            "$ref": "#/components/responses/Problem"
          },
          "404": {
            "$ref": "#/components/responses/Problem"
          },
          "405": {
            "$ref": "#/components/responses/Problem"
          },
          "409": {
            "$ref": "#/components/responses/Problem"
          },
          "414": {
            "$ref": "#/components/responses/Problem"
          },
          "422": {
            "$ref": "#/components/responses/Problem"
          },
          "429": {
            "$ref": "#/components/responses/Problem"
          },
          "500": {
            "$ref": "#/components/responses/Problem"
          },
          "503": {
            "$ref": "#/components/responses/Problem"
          },
          "504": {
            "$ref": "#/components/responses/Problem"
          }
        },
        "security": [
          {
            "ApiKey": []
          }
        ],
        "summary": "getHistorySnapshot"
      }
    },
    "/v1/history/ticks": {
      "get": {
        "description": "Private local pilot with account-wide included credits. Namespace-scoped IDs; overage off. Successful data pages cost one credit; account/errors/304/aborted or timed-out deliveries are free. No payment or source distribution rights are implied.",
        "operationId": "listHistoryTicks",
        "parameters": [
          {
            "description": "Explicit namespace; history IDs are permanent source-local IDs.",
            "in": "query",
            "name": "namespace",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "One to eight entitled source/region IDs.",
            "in": "query",
            "name": "books",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "One to ten permanent source-local canonical fixture IDs from mappings.native_fixture_id. Not the upstream source_fixture_id or reviewed group ID.",
            "in": "query",
            "name": "native_fixture_id",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Comma-separated native payout families; default current entitled families.",
            "in": "query",
            "name": "markets",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Page size 1..100; coverage remains present on every page.",
            "in": "query",
            "name": "limit",
            "required": false,
            "schema": {
              "default": 25,
              "maximum": 100,
              "minimum": 1,
              "type": "integer"
            }
          },
          {
            "description": "Opaque whole-query fingerprint; restart explicitly after 409.",
            "in": "query",
            "name": "cursor",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Inclusive received seen_ts; required for ticks/coverage.",
            "in": "query",
            "name": "from",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Exclusive received seen_ts; required for ticks/coverage; maximum 31-day interval.",
            "in": "query",
            "name": "until",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Weak semantic ETag; freshness and access are revalidated before 304.",
            "in": "header",
            "name": "If-None-Match",
            "required": false,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HistoryPage"
                }
              }
            },
            "description": "A typed page. Each successful data page costs one included credit, including explicit missing/insufficient states; account introspection is free. missing[] covers the full query.",
            "headers": {
              "X-Oddswire-Credit-Cost": {
                "$ref": "#/components/headers/X-Oddswire-Credit-Cost"
              },
              "X-Oddswire-Credits-Limit": {
                "$ref": "#/components/headers/X-Oddswire-Credits-Limit"
              },
              "X-Oddswire-Credits-Remaining": {
                "$ref": "#/components/headers/X-Oddswire-Credits-Remaining"
              },
              "X-Oddswire-Credits-Reserved": {
                "$ref": "#/components/headers/X-Oddswire-Credits-Reserved"
              },
              "X-Oddswire-Credits-Reset": {
                "$ref": "#/components/headers/X-Oddswire-Credits-Reset"
              },
              "X-Oddswire-Credits-Used": {
                "$ref": "#/components/headers/X-Oddswire-Credits-Used"
              },
              "X-Oddswire-Metering": {
                "$ref": "#/components/headers/X-Oddswire-Metering"
              },
              "X-Oddswire-Overage": {
                "$ref": "#/components/headers/X-Oddswire-Overage"
              },
              "X-Oddswire-Usage-State": {
                "$ref": "#/components/headers/X-Oddswire-Usage-State"
              },
              "X-Request-ID": {
                "$ref": "#/components/headers/X-Request-ID"
              }
            }
          },
          "304": {
            "description": "Semantically unchanged after authentication and eligibility validation; always zero credits, including at exhausted quota.",
            "headers": {
              "X-Oddswire-Credit-Cost": {
                "$ref": "#/components/headers/X-Oddswire-Credit-Cost"
              },
              "X-Oddswire-Credits-Limit": {
                "$ref": "#/components/headers/X-Oddswire-Credits-Limit"
              },
              "X-Oddswire-Credits-Remaining": {
                "$ref": "#/components/headers/X-Oddswire-Credits-Remaining"
              },
              "X-Oddswire-Credits-Reserved": {
                "$ref": "#/components/headers/X-Oddswire-Credits-Reserved"
              },
              "X-Oddswire-Credits-Reset": {
                "$ref": "#/components/headers/X-Oddswire-Credits-Reset"
              },
              "X-Oddswire-Credits-Used": {
                "$ref": "#/components/headers/X-Oddswire-Credits-Used"
              },
              "X-Oddswire-Metering": {
                "$ref": "#/components/headers/X-Oddswire-Metering"
              },
              "X-Oddswire-Overage": {
                "$ref": "#/components/headers/X-Oddswire-Overage"
              },
              "X-Oddswire-Usage-State": {
                "$ref": "#/components/headers/X-Oddswire-Usage-State"
              },
              "X-Request-ID": {
                "$ref": "#/components/headers/X-Request-ID"
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/Problem"
          },
          "401": {
            "$ref": "#/components/responses/Problem"
          },
          "402": {
            "$ref": "#/components/responses/Problem"
          },
          "403": {
            "$ref": "#/components/responses/Problem"
          },
          "404": {
            "$ref": "#/components/responses/Problem"
          },
          "405": {
            "$ref": "#/components/responses/Problem"
          },
          "409": {
            "$ref": "#/components/responses/Problem"
          },
          "414": {
            "$ref": "#/components/responses/Problem"
          },
          "422": {
            "$ref": "#/components/responses/Problem"
          },
          "429": {
            "$ref": "#/components/responses/Problem"
          },
          "500": {
            "$ref": "#/components/responses/Problem"
          },
          "503": {
            "$ref": "#/components/responses/Problem"
          },
          "504": {
            "$ref": "#/components/responses/Problem"
          }
        },
        "security": [
          {
            "ApiKey": []
          }
        ],
        "summary": "listHistoryTicks"
      }
    },
    "/v1/mappings": {
      "get": {
        "description": "Private local pilot with account-wide included credits. Namespace-scoped IDs; overage off. Successful data pages cost one credit; account/errors/304/aborted or timed-out deliveries are free. No payment or source distribution rights are implied.",
        "operationId": "listMappings",
        "parameters": [
          {
            "description": "Explicit pilot namespace; numeric IDs are scoped to it.",
            "in": "query",
            "name": "namespace",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Page size 1..100; default 25.",
            "in": "query",
            "name": "limit",
            "required": false,
            "schema": {
              "default": 25,
              "maximum": 100,
              "minimum": 1,
              "type": "integer"
            }
          },
          {
            "description": "Opaque query-bound cursor; restart on 409 after data changes.",
            "in": "query",
            "name": "cursor",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Comma-separated namespace-scoped fixture/group IDs (max 25).",
            "in": "query",
            "name": "fixture",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Comma-separated competition IDs.",
            "in": "query",
            "name": "competition",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Comma-separated sport IDs.",
            "in": "query",
            "name": "sport",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Source/region IDs, not brand IDs (comma separated).",
            "in": "query",
            "name": "books",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Inclusive UTC-normalized RFC3339 kickoff bound.",
            "in": "query",
            "name": "from",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Exclusive RFC3339 kickoff bound.",
            "in": "query",
            "name": "to",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Stored fixture state.",
            "in": "query",
            "name": "status",
            "required": false,
            "schema": {
              "enum": [
                "scheduled",
                "live",
                "ended",
                "cancelled"
              ],
              "type": "string"
            }
          },
          {
            "description": "Exact native fixture ID; requires one source in books.",
            "in": "query",
            "name": "native_fixture",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Weak semantic ETag; freshness and access are revalidated before 304.",
            "in": "header",
            "name": "If-None-Match",
            "required": false,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/MappingsPage"
                }
              }
            },
            "description": "A typed page. Each successful data page costs one included credit, including explicit missing/insufficient states; account introspection is free. missing[] covers the full query.",
            "headers": {
              "X-Oddswire-Credit-Cost": {
                "$ref": "#/components/headers/X-Oddswire-Credit-Cost"
              },
              "X-Oddswire-Credits-Limit": {
                "$ref": "#/components/headers/X-Oddswire-Credits-Limit"
              },
              "X-Oddswire-Credits-Remaining": {
                "$ref": "#/components/headers/X-Oddswire-Credits-Remaining"
              },
              "X-Oddswire-Credits-Reserved": {
                "$ref": "#/components/headers/X-Oddswire-Credits-Reserved"
              },
              "X-Oddswire-Credits-Reset": {
                "$ref": "#/components/headers/X-Oddswire-Credits-Reset"
              },
              "X-Oddswire-Credits-Used": {
                "$ref": "#/components/headers/X-Oddswire-Credits-Used"
              },
              "X-Oddswire-Metering": {
                "$ref": "#/components/headers/X-Oddswire-Metering"
              },
              "X-Oddswire-Overage": {
                "$ref": "#/components/headers/X-Oddswire-Overage"
              },
              "X-Oddswire-Usage-State": {
                "$ref": "#/components/headers/X-Oddswire-Usage-State"
              },
              "X-Request-ID": {
                "$ref": "#/components/headers/X-Request-ID"
              }
            }
          },
          "304": {
            "description": "Semantically unchanged after authentication and eligibility validation; always zero credits, including at exhausted quota.",
            "headers": {
              "X-Oddswire-Credit-Cost": {
                "$ref": "#/components/headers/X-Oddswire-Credit-Cost"
              },
              "X-Oddswire-Credits-Limit": {
                "$ref": "#/components/headers/X-Oddswire-Credits-Limit"
              },
              "X-Oddswire-Credits-Remaining": {
                "$ref": "#/components/headers/X-Oddswire-Credits-Remaining"
              },
              "X-Oddswire-Credits-Reserved": {
                "$ref": "#/components/headers/X-Oddswire-Credits-Reserved"
              },
              "X-Oddswire-Credits-Reset": {
                "$ref": "#/components/headers/X-Oddswire-Credits-Reset"
              },
              "X-Oddswire-Credits-Used": {
                "$ref": "#/components/headers/X-Oddswire-Credits-Used"
              },
              "X-Oddswire-Metering": {
                "$ref": "#/components/headers/X-Oddswire-Metering"
              },
              "X-Oddswire-Overage": {
                "$ref": "#/components/headers/X-Oddswire-Overage"
              },
              "X-Oddswire-Usage-State": {
                "$ref": "#/components/headers/X-Oddswire-Usage-State"
              },
              "X-Request-ID": {
                "$ref": "#/components/headers/X-Request-ID"
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/Problem"
          },
          "401": {
            "$ref": "#/components/responses/Problem"
          },
          "402": {
            "$ref": "#/components/responses/Problem"
          },
          "403": {
            "$ref": "#/components/responses/Problem"
          },
          "404": {
            "$ref": "#/components/responses/Problem"
          },
          "405": {
            "$ref": "#/components/responses/Problem"
          },
          "409": {
            "$ref": "#/components/responses/Problem"
          },
          "414": {
            "$ref": "#/components/responses/Problem"
          },
          "422": {
            "$ref": "#/components/responses/Problem"
          },
          "429": {
            "$ref": "#/components/responses/Problem"
          },
          "500": {
            "$ref": "#/components/responses/Problem"
          },
          "503": {
            "$ref": "#/components/responses/Problem"
          },
          "504": {
            "$ref": "#/components/responses/Problem"
          }
        },
        "security": [
          {
            "ApiKey": []
          }
        ],
        "summary": "listMappings"
      }
    },
    "/v1/markets": {
      "get": {
        "description": "Private local pilot with account-wide included credits. Namespace-scoped IDs; overage off. Successful data pages cost one credit; account/errors/304/aborted or timed-out deliveries are free. No payment or source distribution rights are implied.",
        "operationId": "listMarkets",
        "parameters": [
          {
            "description": "Explicit pilot namespace; numeric IDs are scoped to it.",
            "in": "query",
            "name": "namespace",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Page size 1..100; default 25.",
            "in": "query",
            "name": "limit",
            "required": false,
            "schema": {
              "default": 25,
              "maximum": 100,
              "minimum": 1,
              "type": "integer"
            }
          },
          {
            "description": "Opaque query-bound cursor; restart on 409 after data changes.",
            "in": "query",
            "name": "cursor",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Comma-separated sport IDs.",
            "in": "query",
            "name": "sport",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Families: 1x2,total,asian_handicap.",
            "in": "query",
            "name": "markets",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Market period.",
            "in": "query",
            "name": "period",
            "required": false,
            "schema": {
              "enum": [
                "full_time",
                "first_half"
              ],
              "type": "string"
            }
          },
          {
            "description": "Weak semantic ETag; freshness and access are revalidated before 304.",
            "in": "header",
            "name": "If-None-Match",
            "required": false,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/MarketsPage"
                }
              }
            },
            "description": "A typed page. Each successful data page costs one included credit, including explicit missing/insufficient states; account introspection is free. missing[] covers the full query.",
            "headers": {
              "X-Oddswire-Credit-Cost": {
                "$ref": "#/components/headers/X-Oddswire-Credit-Cost"
              },
              "X-Oddswire-Credits-Limit": {
                "$ref": "#/components/headers/X-Oddswire-Credits-Limit"
              },
              "X-Oddswire-Credits-Remaining": {
                "$ref": "#/components/headers/X-Oddswire-Credits-Remaining"
              },
              "X-Oddswire-Credits-Reserved": {
                "$ref": "#/components/headers/X-Oddswire-Credits-Reserved"
              },
              "X-Oddswire-Credits-Reset": {
                "$ref": "#/components/headers/X-Oddswire-Credits-Reset"
              },
              "X-Oddswire-Credits-Used": {
                "$ref": "#/components/headers/X-Oddswire-Credits-Used"
              },
              "X-Oddswire-Metering": {
                "$ref": "#/components/headers/X-Oddswire-Metering"
              },
              "X-Oddswire-Overage": {
                "$ref": "#/components/headers/X-Oddswire-Overage"
              },
              "X-Oddswire-Usage-State": {
                "$ref": "#/components/headers/X-Oddswire-Usage-State"
              },
              "X-Request-ID": {
                "$ref": "#/components/headers/X-Request-ID"
              }
            }
          },
          "304": {
            "description": "Semantically unchanged after authentication and eligibility validation; always zero credits, including at exhausted quota.",
            "headers": {
              "X-Oddswire-Credit-Cost": {
                "$ref": "#/components/headers/X-Oddswire-Credit-Cost"
              },
              "X-Oddswire-Credits-Limit": {
                "$ref": "#/components/headers/X-Oddswire-Credits-Limit"
              },
              "X-Oddswire-Credits-Remaining": {
                "$ref": "#/components/headers/X-Oddswire-Credits-Remaining"
              },
              "X-Oddswire-Credits-Reserved": {
                "$ref": "#/components/headers/X-Oddswire-Credits-Reserved"
              },
              "X-Oddswire-Credits-Reset": {
                "$ref": "#/components/headers/X-Oddswire-Credits-Reset"
              },
              "X-Oddswire-Credits-Used": {
                "$ref": "#/components/headers/X-Oddswire-Credits-Used"
              },
              "X-Oddswire-Metering": {
                "$ref": "#/components/headers/X-Oddswire-Metering"
              },
              "X-Oddswire-Overage": {
                "$ref": "#/components/headers/X-Oddswire-Overage"
              },
              "X-Oddswire-Usage-State": {
                "$ref": "#/components/headers/X-Oddswire-Usage-State"
              },
              "X-Request-ID": {
                "$ref": "#/components/headers/X-Request-ID"
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/Problem"
          },
          "401": {
            "$ref": "#/components/responses/Problem"
          },
          "402": {
            "$ref": "#/components/responses/Problem"
          },
          "403": {
            "$ref": "#/components/responses/Problem"
          },
          "404": {
            "$ref": "#/components/responses/Problem"
          },
          "405": {
            "$ref": "#/components/responses/Problem"
          },
          "409": {
            "$ref": "#/components/responses/Problem"
          },
          "414": {
            "$ref": "#/components/responses/Problem"
          },
          "422": {
            "$ref": "#/components/responses/Problem"
          },
          "429": {
            "$ref": "#/components/responses/Problem"
          },
          "500": {
            "$ref": "#/components/responses/Problem"
          },
          "503": {
            "$ref": "#/components/responses/Problem"
          },
          "504": {
            "$ref": "#/components/responses/Problem"
          }
        },
        "security": [
          {
            "ApiKey": []
          }
        ],
        "summary": "listMarkets"
      }
    },
    "/v1/odds": {
      "get": {
        "description": "Private local pilot with account-wide included credits. Namespace-scoped IDs; overage off. Successful data pages cost one credit; account/errors/304/aborted or timed-out deliveries are free. No payment or source distribution rights are implied.",
        "operationId": "listOdds",
        "parameters": [
          {
            "description": "Explicit pilot namespace; numeric IDs are scoped to it.",
            "in": "query",
            "name": "namespace",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Page size 1..100; default 25.",
            "in": "query",
            "name": "limit",
            "required": false,
            "schema": {
              "default": 25,
              "maximum": 100,
              "minimum": 1,
              "type": "integer"
            }
          },
          {
            "description": "Opaque query-bound cursor; restart on 409 after data changes.",
            "in": "query",
            "name": "cursor",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Comma-separated namespace-scoped fixture/group IDs (max 25).",
            "in": "query",
            "name": "fixture",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Comma-separated competition IDs.",
            "in": "query",
            "name": "competition",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Comma-separated sport IDs.",
            "in": "query",
            "name": "sport",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Source/region IDs, not brand IDs (comma separated).",
            "in": "query",
            "name": "books",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Inclusive UTC-normalized RFC3339 kickoff bound.",
            "in": "query",
            "name": "from",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Exclusive RFC3339 kickoff bound.",
            "in": "query",
            "name": "to",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Stored fixture state.",
            "in": "query",
            "name": "status",
            "required": false,
            "schema": {
              "enum": [
                "scheduled",
                "live",
                "ended",
                "cancelled"
              ],
              "type": "string"
            }
          },
          {
            "description": "Families: 1x2,total,asian_handicap.",
            "in": "query",
            "name": "markets",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Market period.",
            "in": "query",
            "name": "period",
            "required": false,
            "schema": {
              "enum": [
                "full_time",
                "first_half"
              ],
              "type": "string"
            }
          },
          {
            "description": "Display format; canonical decimal/native units remain unchanged.",
            "in": "query",
            "name": "format",
            "required": false,
            "schema": {
              "enum": [
                "decimal",
                "american"
              ],
              "type": "string"
            }
          },
          {
            "description": "Explicitly include stale/suspended/unavailable retained quotes; invalid quotes remain excluded.",
            "in": "query",
            "name": "include_inactive",
            "required": false,
            "schema": {
              "type": "boolean"
            }
          },
          {
            "description": "Exact signed home-relative quarter line in group orientation.",
            "in": "query",
            "name": "line_quarters",
            "required": false,
            "schema": {
              "type": "integer"
            }
          },
          {
            "description": "Weak semantic ETag; freshness and access are revalidated before 304.",
            "in": "header",
            "name": "If-None-Match",
            "required": false,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/OddsPage"
                }
              }
            },
            "description": "A typed page. Each successful data page costs one included credit, including explicit missing/insufficient states; account introspection is free. missing[] covers the full query.",
            "headers": {
              "X-Oddswire-Credit-Cost": {
                "$ref": "#/components/headers/X-Oddswire-Credit-Cost"
              },
              "X-Oddswire-Credits-Limit": {
                "$ref": "#/components/headers/X-Oddswire-Credits-Limit"
              },
              "X-Oddswire-Credits-Remaining": {
                "$ref": "#/components/headers/X-Oddswire-Credits-Remaining"
              },
              "X-Oddswire-Credits-Reserved": {
                "$ref": "#/components/headers/X-Oddswire-Credits-Reserved"
              },
              "X-Oddswire-Credits-Reset": {
                "$ref": "#/components/headers/X-Oddswire-Credits-Reset"
              },
              "X-Oddswire-Credits-Used": {
                "$ref": "#/components/headers/X-Oddswire-Credits-Used"
              },
              "X-Oddswire-Metering": {
                "$ref": "#/components/headers/X-Oddswire-Metering"
              },
              "X-Oddswire-Overage": {
                "$ref": "#/components/headers/X-Oddswire-Overage"
              },
              "X-Oddswire-Usage-State": {
                "$ref": "#/components/headers/X-Oddswire-Usage-State"
              },
              "X-Request-ID": {
                "$ref": "#/components/headers/X-Request-ID"
              }
            }
          },
          "304": {
            "description": "Semantically unchanged after authentication and eligibility validation; always zero credits, including at exhausted quota.",
            "headers": {
              "X-Oddswire-Credit-Cost": {
                "$ref": "#/components/headers/X-Oddswire-Credit-Cost"
              },
              "X-Oddswire-Credits-Limit": {
                "$ref": "#/components/headers/X-Oddswire-Credits-Limit"
              },
              "X-Oddswire-Credits-Remaining": {
                "$ref": "#/components/headers/X-Oddswire-Credits-Remaining"
              },
              "X-Oddswire-Credits-Reserved": {
                "$ref": "#/components/headers/X-Oddswire-Credits-Reserved"
              },
              "X-Oddswire-Credits-Reset": {
                "$ref": "#/components/headers/X-Oddswire-Credits-Reset"
              },
              "X-Oddswire-Credits-Used": {
                "$ref": "#/components/headers/X-Oddswire-Credits-Used"
              },
              "X-Oddswire-Metering": {
                "$ref": "#/components/headers/X-Oddswire-Metering"
              },
              "X-Oddswire-Overage": {
                "$ref": "#/components/headers/X-Oddswire-Overage"
              },
              "X-Oddswire-Usage-State": {
                "$ref": "#/components/headers/X-Oddswire-Usage-State"
              },
              "X-Request-ID": {
                "$ref": "#/components/headers/X-Request-ID"
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/Problem"
          },
          "401": {
            "$ref": "#/components/responses/Problem"
          },
          "402": {
            "$ref": "#/components/responses/Problem"
          },
          "403": {
            "$ref": "#/components/responses/Problem"
          },
          "404": {
            "$ref": "#/components/responses/Problem"
          },
          "405": {
            "$ref": "#/components/responses/Problem"
          },
          "409": {
            "$ref": "#/components/responses/Problem"
          },
          "414": {
            "$ref": "#/components/responses/Problem"
          },
          "422": {
            "$ref": "#/components/responses/Problem"
          },
          "429": {
            "$ref": "#/components/responses/Problem"
          },
          "500": {
            "$ref": "#/components/responses/Problem"
          },
          "503": {
            "$ref": "#/components/responses/Problem"
          },
          "504": {
            "$ref": "#/components/responses/Problem"
          }
        },
        "security": [
          {
            "ApiKey": []
          }
        ],
        "summary": "listOdds"
      }
    },
    "/v1/sports": {
      "get": {
        "description": "Private local pilot with account-wide included credits. Namespace-scoped IDs; overage off. Successful data pages cost one credit; account/errors/304/aborted or timed-out deliveries are free. No payment or source distribution rights are implied.",
        "operationId": "listSports",
        "parameters": [
          {
            "description": "Explicit pilot namespace; numeric IDs are scoped to it.",
            "in": "query",
            "name": "namespace",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Page size 1..100; default 25.",
            "in": "query",
            "name": "limit",
            "required": false,
            "schema": {
              "default": 25,
              "maximum": 100,
              "minimum": 1,
              "type": "integer"
            }
          },
          {
            "description": "Opaque query-bound cursor; restart on 409 after data changes.",
            "in": "query",
            "name": "cursor",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Weak semantic ETag; freshness and access are revalidated before 304.",
            "in": "header",
            "name": "If-None-Match",
            "required": false,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/SportsPage"
                }
              }
            },
            "description": "A typed page. Each successful data page costs one included credit, including explicit missing/insufficient states; account introspection is free. missing[] covers the full query.",
            "headers": {
              "X-Oddswire-Credit-Cost": {
                "$ref": "#/components/headers/X-Oddswire-Credit-Cost"
              },
              "X-Oddswire-Credits-Limit": {
                "$ref": "#/components/headers/X-Oddswire-Credits-Limit"
              },
              "X-Oddswire-Credits-Remaining": {
                "$ref": "#/components/headers/X-Oddswire-Credits-Remaining"
              },
              "X-Oddswire-Credits-Reserved": {
                "$ref": "#/components/headers/X-Oddswire-Credits-Reserved"
              },
              "X-Oddswire-Credits-Reset": {
                "$ref": "#/components/headers/X-Oddswire-Credits-Reset"
              },
              "X-Oddswire-Credits-Used": {
                "$ref": "#/components/headers/X-Oddswire-Credits-Used"
              },
              "X-Oddswire-Metering": {
                "$ref": "#/components/headers/X-Oddswire-Metering"
              },
              "X-Oddswire-Overage": {
                "$ref": "#/components/headers/X-Oddswire-Overage"
              },
              "X-Oddswire-Usage-State": {
                "$ref": "#/components/headers/X-Oddswire-Usage-State"
              },
              "X-Request-ID": {
                "$ref": "#/components/headers/X-Request-ID"
              }
            }
          },
          "304": {
            "description": "Semantically unchanged after authentication and eligibility validation; always zero credits, including at exhausted quota.",
            "headers": {
              "X-Oddswire-Credit-Cost": {
                "$ref": "#/components/headers/X-Oddswire-Credit-Cost"
              },
              "X-Oddswire-Credits-Limit": {
                "$ref": "#/components/headers/X-Oddswire-Credits-Limit"
              },
              "X-Oddswire-Credits-Remaining": {
                "$ref": "#/components/headers/X-Oddswire-Credits-Remaining"
              },
              "X-Oddswire-Credits-Reserved": {
                "$ref": "#/components/headers/X-Oddswire-Credits-Reserved"
              },
              "X-Oddswire-Credits-Reset": {
                "$ref": "#/components/headers/X-Oddswire-Credits-Reset"
              },
              "X-Oddswire-Credits-Used": {
                "$ref": "#/components/headers/X-Oddswire-Credits-Used"
              },
              "X-Oddswire-Metering": {
                "$ref": "#/components/headers/X-Oddswire-Metering"
              },
              "X-Oddswire-Overage": {
                "$ref": "#/components/headers/X-Oddswire-Overage"
              },
              "X-Oddswire-Usage-State": {
                "$ref": "#/components/headers/X-Oddswire-Usage-State"
              },
              "X-Request-ID": {
                "$ref": "#/components/headers/X-Request-ID"
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/Problem"
          },
          "401": {
            "$ref": "#/components/responses/Problem"
          },
          "402": {
            "$ref": "#/components/responses/Problem"
          },
          "403": {
            "$ref": "#/components/responses/Problem"
          },
          "404": {
            "$ref": "#/components/responses/Problem"
          },
          "405": {
            "$ref": "#/components/responses/Problem"
          },
          "409": {
            "$ref": "#/components/responses/Problem"
          },
          "414": {
            "$ref": "#/components/responses/Problem"
          },
          "422": {
            "$ref": "#/components/responses/Problem"
          },
          "429": {
            "$ref": "#/components/responses/Problem"
          },
          "500": {
            "$ref": "#/components/responses/Problem"
          },
          "503": {
            "$ref": "#/components/responses/Problem"
          },
          "504": {
            "$ref": "#/components/responses/Problem"
          }
        },
        "security": [
          {
            "ApiKey": []
          }
        ],
        "summary": "listSports"
      }
    },
    "/v1/terminal/board": {
      "post": {
        "description": "Session-only Terminal product. Separate current Terminal grants and display/chart source-purpose/region reviews; API plans/keys and REST credits are not used. Private, no-store, bounded polling and native recorded history only.",
        "operationId": "terminalBoard",
        "parameters": [
          {
            "description": "UUID of an account where the signed-in user is a member; defaults to their oldest account.",
            "in": "header",
            "name": "X-Oddswire-Account",
            "required": false,
            "schema": {
              "format": "uuid",
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/TerminalBoardInput"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/TerminalBoardPage"
                }
              }
            },
            "description": "Account ledger response; no-store. Key secrets appear only once on creation/rotation. Lists contain at most 100 recent entries, active keys first.",
            "headers": {
              "X-Oddswire-Credit-Cost": {
                "$ref": "#/components/headers/X-Oddswire-Credit-Cost"
              },
              "X-Oddswire-Credits-Limit": {
                "$ref": "#/components/headers/X-Oddswire-Credits-Limit"
              },
              "X-Oddswire-Credits-Remaining": {
                "$ref": "#/components/headers/X-Oddswire-Credits-Remaining"
              },
              "X-Oddswire-Credits-Reserved": {
                "$ref": "#/components/headers/X-Oddswire-Credits-Reserved"
              },
              "X-Oddswire-Credits-Reset": {
                "$ref": "#/components/headers/X-Oddswire-Credits-Reset"
              },
              "X-Oddswire-Credits-Used": {
                "$ref": "#/components/headers/X-Oddswire-Credits-Used"
              },
              "X-Oddswire-Metering": {
                "$ref": "#/components/headers/X-Oddswire-Metering"
              },
              "X-Oddswire-Overage": {
                "$ref": "#/components/headers/X-Oddswire-Overage"
              },
              "X-Oddswire-Usage-State": {
                "$ref": "#/components/headers/X-Oddswire-Usage-State"
              },
              "X-Request-ID": {
                "$ref": "#/components/headers/X-Request-ID"
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/Problem"
          },
          "401": {
            "$ref": "#/components/responses/Problem"
          },
          "403": {
            "$ref": "#/components/responses/Problem"
          },
          "404": {
            "$ref": "#/components/responses/Problem"
          },
          "405": {
            "$ref": "#/components/responses/Problem"
          },
          "409": {
            "$ref": "#/components/responses/Problem"
          },
          "422": {
            "$ref": "#/components/responses/Problem"
          },
          "429": {
            "$ref": "#/components/responses/Problem"
          },
          "500": {
            "$ref": "#/components/responses/Problem"
          },
          "503": {
            "$ref": "#/components/responses/Problem"
          },
          "504": {
            "$ref": "#/components/responses/Problem"
          }
        },
        "security": [
          {
            "AccountSession": []
          }
        ],
        "summary": "terminalBoard"
      }
    },
    "/v1/terminal/chart": {
      "post": {
        "description": "Session-only Terminal product. Separate current Terminal grants and display/chart source-purpose/region reviews; API plans/keys and REST credits are not used. Private, no-store, bounded polling and native recorded history only.",
        "operationId": "terminalChart",
        "parameters": [
          {
            "description": "UUID of an account where the signed-in user is a member; defaults to their oldest account.",
            "in": "header",
            "name": "X-Oddswire-Account",
            "required": false,
            "schema": {
              "format": "uuid",
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/TerminalChartInput"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/TerminalChartPage"
                }
              }
            },
            "description": "Account ledger response; no-store. Key secrets appear only once on creation/rotation. Lists contain at most 100 recent entries, active keys first.",
            "headers": {
              "X-Oddswire-Credit-Cost": {
                "$ref": "#/components/headers/X-Oddswire-Credit-Cost"
              },
              "X-Oddswire-Credits-Limit": {
                "$ref": "#/components/headers/X-Oddswire-Credits-Limit"
              },
              "X-Oddswire-Credits-Remaining": {
                "$ref": "#/components/headers/X-Oddswire-Credits-Remaining"
              },
              "X-Oddswire-Credits-Reserved": {
                "$ref": "#/components/headers/X-Oddswire-Credits-Reserved"
              },
              "X-Oddswire-Credits-Reset": {
                "$ref": "#/components/headers/X-Oddswire-Credits-Reset"
              },
              "X-Oddswire-Credits-Used": {
                "$ref": "#/components/headers/X-Oddswire-Credits-Used"
              },
              "X-Oddswire-Metering": {
                "$ref": "#/components/headers/X-Oddswire-Metering"
              },
              "X-Oddswire-Overage": {
                "$ref": "#/components/headers/X-Oddswire-Overage"
              },
              "X-Oddswire-Usage-State": {
                "$ref": "#/components/headers/X-Oddswire-Usage-State"
              },
              "X-Request-ID": {
                "$ref": "#/components/headers/X-Request-ID"
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/Problem"
          },
          "401": {
            "$ref": "#/components/responses/Problem"
          },
          "403": {
            "$ref": "#/components/responses/Problem"
          },
          "404": {
            "$ref": "#/components/responses/Problem"
          },
          "405": {
            "$ref": "#/components/responses/Problem"
          },
          "409": {
            "$ref": "#/components/responses/Problem"
          },
          "422": {
            "$ref": "#/components/responses/Problem"
          },
          "429": {
            "$ref": "#/components/responses/Problem"
          },
          "500": {
            "$ref": "#/components/responses/Problem"
          },
          "503": {
            "$ref": "#/components/responses/Problem"
          },
          "504": {
            "$ref": "#/components/responses/Problem"
          }
        },
        "security": [
          {
            "AccountSession": []
          }
        ],
        "summary": "terminalChart"
      }
    },
    "/v1/terminal/context": {
      "get": {
        "description": "Session-only Terminal product. Separate current Terminal grants and display/chart source-purpose/region reviews; API plans/keys and REST credits are not used. Private, no-store, bounded polling and native recorded history only.",
        "operationId": "terminalContext",
        "parameters": [
          {
            "description": "UUID of an account where the signed-in user is a member; defaults to their oldest account.",
            "in": "header",
            "name": "X-Oddswire-Account",
            "required": false,
            "schema": {
              "format": "uuid",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/TerminalContextPage"
                }
              }
            },
            "description": "Account ledger response; no-store. Key secrets appear only once on creation/rotation. Lists contain at most 100 recent entries, active keys first.",
            "headers": {
              "X-Oddswire-Credit-Cost": {
                "$ref": "#/components/headers/X-Oddswire-Credit-Cost"
              },
              "X-Oddswire-Credits-Limit": {
                "$ref": "#/components/headers/X-Oddswire-Credits-Limit"
              },
              "X-Oddswire-Credits-Remaining": {
                "$ref": "#/components/headers/X-Oddswire-Credits-Remaining"
              },
              "X-Oddswire-Credits-Reserved": {
                "$ref": "#/components/headers/X-Oddswire-Credits-Reserved"
              },
              "X-Oddswire-Credits-Reset": {
                "$ref": "#/components/headers/X-Oddswire-Credits-Reset"
              },
              "X-Oddswire-Credits-Used": {
                "$ref": "#/components/headers/X-Oddswire-Credits-Used"
              },
              "X-Oddswire-Metering": {
                "$ref": "#/components/headers/X-Oddswire-Metering"
              },
              "X-Oddswire-Overage": {
                "$ref": "#/components/headers/X-Oddswire-Overage"
              },
              "X-Oddswire-Usage-State": {
                "$ref": "#/components/headers/X-Oddswire-Usage-State"
              },
              "X-Request-ID": {
                "$ref": "#/components/headers/X-Request-ID"
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/Problem"
          },
          "401": {
            "$ref": "#/components/responses/Problem"
          },
          "403": {
            "$ref": "#/components/responses/Problem"
          },
          "404": {
            "$ref": "#/components/responses/Problem"
          },
          "405": {
            "$ref": "#/components/responses/Problem"
          },
          "409": {
            "$ref": "#/components/responses/Problem"
          },
          "422": {
            "$ref": "#/components/responses/Problem"
          },
          "429": {
            "$ref": "#/components/responses/Problem"
          },
          "500": {
            "$ref": "#/components/responses/Problem"
          },
          "503": {
            "$ref": "#/components/responses/Problem"
          },
          "504": {
            "$ref": "#/components/responses/Problem"
          }
        },
        "security": [
          {
            "AccountSession": []
          }
        ],
        "summary": "terminalContext"
      }
    },
    "/v1/terminal/preferences": {
      "put": {
        "description": "Session-only Terminal product. Separate current Terminal grants and display/chart source-purpose/region reviews; API plans/keys and REST credits are not used. Private, no-store, bounded polling and native recorded history only.",
        "operationId": "terminalPreferences",
        "parameters": [
          {
            "description": "UUID of an account where the signed-in user is a member; defaults to their oldest account.",
            "in": "header",
            "name": "X-Oddswire-Account",
            "required": false,
            "schema": {
              "format": "uuid",
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/TerminalPreferencesInput"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/TerminalPreferencesPage"
                }
              }
            },
            "description": "Account ledger response; no-store. Key secrets appear only once on creation/rotation. Lists contain at most 100 recent entries, active keys first.",
            "headers": {
              "X-Oddswire-Credit-Cost": {
                "$ref": "#/components/headers/X-Oddswire-Credit-Cost"
              },
              "X-Oddswire-Credits-Limit": {
                "$ref": "#/components/headers/X-Oddswire-Credits-Limit"
              },
              "X-Oddswire-Credits-Remaining": {
                "$ref": "#/components/headers/X-Oddswire-Credits-Remaining"
              },
              "X-Oddswire-Credits-Reserved": {
                "$ref": "#/components/headers/X-Oddswire-Credits-Reserved"
              },
              "X-Oddswire-Credits-Reset": {
                "$ref": "#/components/headers/X-Oddswire-Credits-Reset"
              },
              "X-Oddswire-Credits-Used": {
                "$ref": "#/components/headers/X-Oddswire-Credits-Used"
              },
              "X-Oddswire-Metering": {
                "$ref": "#/components/headers/X-Oddswire-Metering"
              },
              "X-Oddswire-Overage": {
                "$ref": "#/components/headers/X-Oddswire-Overage"
              },
              "X-Oddswire-Usage-State": {
                "$ref": "#/components/headers/X-Oddswire-Usage-State"
              },
              "X-Request-ID": {
                "$ref": "#/components/headers/X-Request-ID"
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/Problem"
          },
          "401": {
            "$ref": "#/components/responses/Problem"
          },
          "403": {
            "$ref": "#/components/responses/Problem"
          },
          "404": {
            "$ref": "#/components/responses/Problem"
          },
          "405": {
            "$ref": "#/components/responses/Problem"
          },
          "409": {
            "$ref": "#/components/responses/Problem"
          },
          "422": {
            "$ref": "#/components/responses/Problem"
          },
          "429": {
            "$ref": "#/components/responses/Problem"
          },
          "500": {
            "$ref": "#/components/responses/Problem"
          },
          "503": {
            "$ref": "#/components/responses/Problem"
          },
          "504": {
            "$ref": "#/components/responses/Problem"
          }
        },
        "security": [
          {
            "AccountSession": []
          }
        ],
        "summary": "terminalPreferences"
      }
    }
  },
  "servers": [
    {
      "url": "http://127.0.0.1:9113"
    }
  ],
  "webhooks": {
    "line_move.v1": {
      "post": {
        "description": "Outgoing user-configured receiver contract, not a callable Oddswire API route. Verify HMAC-SHA256 over timestamp + period + exact raw body using the base64url-decoded target secret and a 300-second timestamp tolerance; durably deduplicate verified body id before 2xx. At-least-once retries preserve body/event/delivery IDs with fresh timestamp/attempt. Six attempts maximum, earlier freshness/kickoff expiry, no redirects. Current access and alerts-purpose rights required; no external origin enabled by default.",
        "parameters": [
          {
            "in": "header",
            "name": "Oddswire-Signature",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "in": "header",
            "name": "Oddswire-Event-ID",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "in": "header",
            "name": "Oddswire-Delivery-ID",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "in": "header",
            "name": "Oddswire-Attempt",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/AlertEvent"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "Receiver durably deduplicated and accepted the event."
          },
          "202": {
            "description": "Receiver durably deduplicated and enqueued the event."
          },
          "204": {
            "description": "Receiver accepted an event, including an already processed duplicate."
          }
        },
        "summary": "Signed native line-move notification"
      }
    }
  }
}
