{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "$id": "https://artifacts.apis.io/sealgate-ai/json-schema/sealgate-ai-balance-response-schema.json",
  "title": "BalanceResponse",
  "description": "What an org has, is allowed, and has spent this period.",
  "x-generated": "2026-10-30",
  "x-method": "derived",
  "x-generator": "derive-json-schema.py",
  "x-source": "openapi/sealgate-ai-dashboard-openapi.json#/components/schemas/BalanceResponse",
  "properties": {
    "org_id": {
      "type": "string",
      "title": "Org Id"
    },
    "balance": {
      "type": "string",
      "pattern": "^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$",
      "title": "Balance"
    },
    "tier": {
      "type": "string",
      "title": "Tier",
      "default": "free"
    },
    "subscription": {
      "anyOf": [
        {
          "$ref": "#/$defs/SubscriptionOut"
        },
        {
          "type": "null"
        }
      ]
    },
    "tiers": {
      "items": {
        "$ref": "#/$defs/TierOut"
      },
      "type": "array",
      "title": "Tiers",
      "default": []
    },
    "overage": {
      "anyOf": [
        {
          "$ref": "#/$defs/OverageOut"
        },
        {
          "type": "null"
        }
      ]
    },
    "tier_credits": {
      "type": "string",
      "pattern": "^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$",
      "title": "Tier Credits",
      "default": "0"
    },
    "purchased": {
      "type": "string",
      "pattern": "^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$",
      "title": "Purchased",
      "default": "0"
    },
    "period_end": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "title": "Period End"
    },
    "purchase_org": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "title": "Purchase Org"
    },
    "credit_unit_amount": {
      "type": "string",
      "pattern": "^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$",
      "title": "Credit Unit Amount",
      "default": "1"
    },
    "packs": {
      "items": {
        "$ref": "#/$defs/PackOut"
      },
      "type": "array",
      "title": "Packs",
      "default": []
    },
    "currency": {
      "type": "string",
      "title": "Currency",
      "default": "usd"
    },
    "granted": {
      "type": "string",
      "pattern": "^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$",
      "title": "Granted"
    },
    "default_caps": {
      "additionalProperties": {
        "type": "string",
        "pattern": "^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$"
      },
      "type": "object",
      "title": "Default Caps"
    },
    "window": {
      "type": "string",
      "title": "Window"
    },
    "period": {
      "type": "string",
      "title": "Period"
    },
    "periods": {
      "additionalProperties": {
        "type": "string"
      },
      "type": "object",
      "title": "Periods"
    },
    "mine": {
      "$ref": "#/$defs/MemberStatusOut"
    },
    "by_meter": {
      "items": {
        "$ref": "#/$defs/MeterSpend"
      },
      "type": "array",
      "title": "By Meter"
    },
    "by_user_meter": {
      "items": {
        "$ref": "#/$defs/UserMeterSpend"
      },
      "type": "array",
      "title": "By User Meter",
      "default": []
    },
    "series": {
      "anyOf": [
        {
          "$ref": "#/$defs/SpendSeriesOut"
        },
        {
          "type": "null"
        }
      ]
    },
    "by_user": {
      "items": {
        "$ref": "#/$defs/UserSpend"
      },
      "type": "array",
      "title": "By User"
    },
    "caps": {
      "items": {
        "$ref": "#/$defs/UserCap"
      },
      "type": "array",
      "title": "Caps"
    },
    "member_emails": {
      "additionalProperties": {
        "type": "string"
      },
      "type": "object",
      "title": "Member Emails",
      "default": {}
    },
    "gates": {
      "items": {
        "$ref": "#/$defs/GateOut"
      },
      "type": "array",
      "title": "Gates",
      "default": []
    },
    "usage_retention_days": {
      "type": "integer",
      "title": "Usage Retention Days",
      "default": 120
    },
    "usage_retention_is_default": {
      "type": "boolean",
      "title": "Usage Retention Is Default",
      "default": true
    },
    "topped_up": {
      "type": "string",
      "pattern": "^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$",
      "title": "Topped Up",
      "default": "0"
    },
    "out_of_credits": {
      "type": "boolean",
      "title": "Out Of Credits",
      "default": false
    },
    "gate_balance": {
      "type": "string",
      "pattern": "^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$",
      "title": "Gate Balance",
      "default": "0"
    },
    "on_demand": {
      "type": "boolean",
      "title": "On Demand",
      "default": false
    },
    "low_balance_credits": {
      "type": "string",
      "pattern": "^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$",
      "title": "Low Balance Credits",
      "default": "100"
    },
    "stripe_enabled": {
      "type": "boolean",
      "title": "Stripe Enabled",
      "default": false
    }
  },
  "type": "object",
  "required": [
    "org_id",
    "balance",
    "granted",
    "default_caps",
    "window",
    "period",
    "periods",
    "mine",
    "by_meter",
    "by_user",
    "caps"
  ],
  "$defs": {
    "GateOut": {
      "properties": {
        "action": {
          "type": "string",
          "title": "Action"
        },
        "status": {
          "type": "string",
          "title": "Status"
        },
        "reason": {
          "type": "string",
          "title": "Reason"
        }
      },
      "type": "object",
      "required": [
        "action",
        "status",
        "reason"
      ],
      "title": "GateOut",
      "description": "One metered action and whether the next call may use it."
    },
    "MemberStatusOut": {
      "properties": {
        "spent": {
          "type": "string",
          "pattern": "^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$",
          "title": "Spent"
        },
        "cap": {
          "anyOf": [
            {
              "type": "string",
              "pattern": "^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$"
            },
            {
              "type": "null"
            }
          ],
          "title": "Cap"
        },
        "window": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "title": "Window"
        }
      },
      "type": "object",
      "required": [
        "spent",
        "cap",
        "window"
      ],
      "title": "MemberStatusOut",
      "description": "The signed-in member's own position, for the sidebar meter."
    },
    "MeterSpend": {
      "properties": {
        "meter": {
          "type": "string",
          "title": "Meter"
        },
        "usage_type": {
          "type": "string",
          "title": "Usage Type"
        },
        "usage_name": {
          "type": "string",
          "title": "Usage Name"
        },
        "unit": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "title": "Unit"
        },
        "quantity": {
          "type": "integer",
          "title": "Quantity"
        },
        "credits": {
          "type": "string",
          "pattern": "^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$",
          "title": "Credits"
        }
      },
      "type": "object",
      "required": [
        "meter",
        "usage_type",
        "usage_name",
        "unit",
        "quantity",
        "credits"
      ],
      "title": "MeterSpend",
      "description": "One line of this period's usage."
    },
    "OverageOut": {
      "properties": {
        "limit": {
          "type": "string",
          "pattern": "^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$",
          "title": "Limit"
        },
        "used": {
          "type": "string",
          "pattern": "^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$",
          "title": "Used"
        },
        "mode": {
          "type": "string",
          "title": "Mode"
        },
        "settleable": {
          "type": "boolean",
          "title": "Settleable",
          "default": false
        },
        "settle_amount_minor": {
          "anyOf": [
            {
              "type": "integer"
            },
            {
              "type": "null"
            }
          ],
          "title": "Settle Amount Minor"
        }
      },
      "type": "object",
      "required": [
        "limit",
        "used",
        "mode"
      ],
      "title": "OverageOut",
      "description": "How far past empty this org may run, and how far it has.\n\nRead-only here. The limit is set per organisation from the CLI, deliberately:\nit is a credit decision, and a page where one fat-fingered zero extends real\ncredit is not a feature."
    },
    "PackOut": {
      "properties": {
        "credits": {
          "type": "string",
          "pattern": "^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$",
          "title": "Credits"
        },
        "amount_minor": {
          "type": "integer",
          "title": "Amount Minor"
        },
        "full_amount_minor": {
          "type": "integer",
          "title": "Full Amount Minor"
        },
        "discount_percent": {
          "type": "integer",
          "title": "Discount Percent",
          "default": 0
        }
      },
      "type": "object",
      "required": [
        "credits",
        "amount_minor",
        "full_amount_minor"
      ],
      "title": "PackOut",
      "description": "One pack on the buy page, priced by the server.\n\nThe amount is sent rather than a rate to multiply: a discounted pack is not\na linear function of the rate, and a client working it out again would\nadvertise a figure the checkout does not charge."
    },
    "SpendPoint": {
      "properties": {
        "at": {
          "type": "string",
          "format": "date-time",
          "title": "At"
        },
        "user_id": {
          "type": "string",
          "title": "User Id"
        },
        "meter": {
          "type": "string",
          "title": "Meter"
        },
        "credits": {
          "type": "string",
          "pattern": "^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$",
          "title": "Credits"
        }
      },
      "type": "object",
      "required": [
        "at",
        "user_id",
        "meter",
        "credits"
      ],
      "title": "SpendPoint",
      "description": "Credits one member spent on one meter in one bucket."
    },
    "SpendSeriesOut": {
      "properties": {
        "bucket": {
          "type": "string",
          "enum": [
            "hour",
            "day"
          ],
          "title": "Bucket"
        },
        "start": {
          "type": "string",
          "format": "date",
          "title": "Start"
        },
        "end": {
          "type": "string",
          "format": "date",
          "title": "End"
        },
        "points": {
          "items": {
            "$ref": "#/$defs/SpendPoint"
          },
          "type": "array",
          "title": "Points"
        }
      },
      "type": "object",
      "required": [
        "bucket",
        "start",
        "end",
        "points"
      ],
      "title": "SpendSeriesOut",
      "description": "The window's usage over time, for the Usage tab's chart."
    },
    "SubscriptionOut": {
      "properties": {
        "tier": {
          "type": "string",
          "title": "Tier"
        },
        "status": {
          "type": "string",
          "title": "Status"
        },
        "current_period_end": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "title": "Current Period End"
        },
        "cancel_at_period_end": {
          "type": "boolean",
          "title": "Cancel At Period End",
          "default": false
        },
        "pending_tier": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "title": "Pending Tier"
        }
      },
      "type": "object",
      "required": [
        "tier",
        "status"
      ],
      "title": "SubscriptionOut",
      "description": "An org's live plan, as the dashboard shows it."
    },
    "TierOut": {
      "properties": {
        "tier": {
          "type": "string",
          "title": "Tier"
        },
        "credits": {
          "type": "string",
          "pattern": "^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$",
          "title": "Credits"
        },
        "purchasable": {
          "type": "boolean",
          "title": "Purchasable",
          "default": false
        },
        "amount_minor": {
          "anyOf": [
            {
              "type": "integer"
            },
            {
              "type": "null"
            }
          ],
          "title": "Amount Minor"
        }
      },
      "type": "object",
      "required": [
        "tier",
        "credits"
      ],
      "title": "TierOut",
      "description": "One plan on offer."
    },
    "UserCap": {
      "properties": {
        "user_id": {
          "type": "string",
          "title": "User Id"
        },
        "caps": {
          "additionalProperties": {
            "type": "string",
            "pattern": "^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$"
          },
          "type": "object",
          "title": "Caps"
        },
        "blocked": {
          "items": {
            "type": "string"
          },
          "type": "array",
          "title": "Blocked",
          "default": []
        }
      },
      "type": "object",
      "required": [
        "user_id",
        "caps"
      ],
      "title": "UserCap",
      "description": "One member's ceilings. A window absent from ``caps`` has none."
    },
    "UserMeterSpend": {
      "properties": {
        "user_id": {
          "type": "string",
          "title": "User Id"
        },
        "meter": {
          "type": "string",
          "title": "Meter"
        },
        "usage_type": {
          "type": "string",
          "title": "Usage Type"
        },
        "usage_name": {
          "type": "string",
          "title": "Usage Name"
        },
        "unit": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "title": "Unit"
        },
        "quantity": {
          "type": "integer",
          "title": "Quantity"
        },
        "credits": {
          "type": "string",
          "pattern": "^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$",
          "title": "Credits"
        }
      },
      "type": "object",
      "required": [
        "user_id",
        "meter",
        "usage_type",
        "usage_name",
        "unit",
        "quantity",
        "credits"
      ],
      "title": "UserMeterSpend",
      "description": "One line of this period's usage, attributed to whoever ran it.\n\nThe same numbers as ``MeterSpend`` with a user against them, so the page\ncan group either way without asking twice."
    },
    "UserSpend": {
      "properties": {
        "user_id": {
          "type": "string",
          "title": "User Id"
        },
        "credits": {
          "type": "string",
          "pattern": "^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$",
          "title": "Credits"
        }
      },
      "type": "object",
      "required": [
        "user_id",
        "credits"
      ],
      "title": "UserSpend",
      "description": "What one member has drawn from the pool this period."
    }
  }
}