{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "$id": "https://raw.githubusercontent.com/api-evangelist/monid/main/json-schema/monid-wallet-topup-config-response-schema.json",
  "title": "WalletTopupConfigResponse",
  "x-generated": "2026-10-07",
  "x-method": "derived",
  "x-generator": "derive-json-schema.py",
  "x-source": "openapi/monid-wallet-api-openapi.yml#/components/schemas/WalletTopupConfigResponse",
  "type": "object",
  "properties": {
    "minAmount": {
      "type": "number",
      "description": "Minimum top-up amount in dollars."
    },
    "maxAmount": {
      "type": "number",
      "description": "Maximum top-up amount in dollars. Omitted when no app-level cap is configured."
    },
    "currency": {
      "type": "string",
      "enum": [
        "USD"
      ],
      "description": "Top-up currency (currently always USD)."
    },
    "processingFee": {
      "type": "object",
      "properties": {
        "type": {
          "type": "string",
          "enum": [
            "PERCENTAGE"
          ]
        },
        "rate": {
          "type": "number",
          "description": "Processing fee rate (e.g. 0.05 for 5%)."
        },
        "description": {
          "type": "string"
        }
      },
      "required": [
        "type",
        "rate",
        "description"
      ]
    },
    "promotion": {
      "type": "object",
      "properties": {
        "key": {
          "type": "string",
          "description": "Promotion key (config-defined)."
        },
        "label": {
          "type": "string",
          "description": "Server-defined display text for the badge."
        }
      },
      "required": [
        "key",
        "label"
      ],
      "description": "Active promotion. Absent when the baseline (`default`) applies — no promotion badge."
    },
    "tiers": {
      "type": "array",
      "items": {
        "type": "object",
        "properties": {
          "minAmount": {
            "type": "number",
            "description": "Inclusive tier minimum in dollars."
          },
          "rate": {
            "type": "number",
            "description": "Bonus rate applied to the actual amount."
          }
        },
        "required": [
          "minAmount",
          "rate"
        ]
      },
      "description": "Bonus tiers for the applied promotion, ascending. Any amount rounds DOWN to a tier; the rate applies to the actual amount."
    },
    "presets": {
      "type": "array",
      "items": {
        "type": "number"
      },
      "description": "Preset amounts in dollars, display order. Bonuses are client-derived from `tiers` (round-down tier match)."
    },
    "defaultPreset": {
      "type": "number",
      "description": "Pre-selected preset amount in dollars."
    },
    "autoReload": {
      "type": "object",
      "properties": {
        "enabled": {
          "type": "boolean",
          "description": "Whether auto-reload is currently enabled on the workspace. True means checkout shows a passive 'auto-reload is on' note instead of an enrollment toggle — disabling lives on the wallet page."
        },
        "topUpToAmount": {
          "type": "number",
          "description": "Balance (dollars) each automatic reload tops up TO — the same 'Top up to' amount the wallet settings panel shows. Metronome charges this minus the current balance."
        },
        "threshold": {
          "type": "number",
          "description": "Balance level (dollars) that triggers a reload."
        }
      },
      "required": [
        "enabled",
        "topUpToAmount",
        "threshold"
      ]
    }
  },
  "required": [
    "minAmount",
    "currency",
    "processingFee",
    "tiers",
    "presets",
    "defaultPreset",
    "autoReload"
  ]
}