{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "$id": "https://artifacts.apis.io/odds-api-io/json-schema/odds-api-io-controllers-grade-request-schema.json",
  "title": "controllers.GradeRequest",
  "x-generated": "2026-11-10",
  "x-method": "derived",
  "x-generator": "derive-json-schema.py",
  "x-source": "openapi/odds-api-io-settlement-api-openapi.yml#/components/schemas/controllers.GradeRequest",
  "type": "object",
  "required": [
    "selections"
  ],
  "properties": {
    "selections": {
      "type": "array",
      "minItems": 1,
      "maxItems": 50,
      "items": {
        "$ref": "#/$defs/controllers.GradeSelectionRequest"
      }
    }
  },
  "$defs": {
    "controllers.GradeSelectionRequest": {
      "type": "object",
      "required": [
        "eventId",
        "market"
      ],
      "properties": {
        "ref": {
          "type": "string",
          "description": "Your own id for the bet, echoed back. At most 64 characters."
        },
        "eventId": {
          "description": "Event id, as a number or a numeric string.",
          "oneOf": [
            {
              "type": "integer"
            },
            {
              "type": "string"
            }
          ]
        },
        "market": {
          "type": "string",
          "description": "Market name as served on /odds, for example ML, Spread, Totals HT, Corners Totals, Player Props."
        },
        "side": {
          "type": "string",
          "description": "home, away, draw, over, under, yes, no, odd, even, 1x, 12, x2, none, neither, or an HT/FT pair such as draw/home. Leave it out when the label carries the bet: correct scores, Winning Margin, goal counts, highest scoring half, Home/Away Team Exact Goals (or send that market's own team), and First/Last Match Corner when the label is 1 or 2. Correct Score and Set Betting also take the score itself as side (\"2-1\") instead of a label."
        },
        "hdp": {
          "type": "number",
          "description": "The line as served on /odds. Handicaps are stated for the home side. Required on handicap, totals, corners, bookings and player prop markets."
        },
        "label": {
          "type": "string",
          "description": "Row label as served. Required for Player Props (\"Arike Ogunbowale (Assists)\") and labelled markets: Home/Away Team Exact Goals (\"Arsenal - 2 Goals\"), Correct Score (\"2-1\"), Winning Margin (\"2 (1)\"), goal counts (\"3+ Goals\") and Highest Scoring Half (\"2nd Half\"). First/Last Match Corner also take \"1\" or \"2\"."
        },
        "tieRule": {
          "type": "string",
          "enum": [
            "lose",
            "void"
          ],
          "description": "What a level score does to a moneyline bet in sports where books differ. Ignored where a fixed rule applies."
        }
      }
    }
  }
}