{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "$id": "https://artifacts.apis.io/kamai-io/json-schema/kamai-io-markup-update-schema.json",
  "title": "MarkupUpdate",
  "x-generated": "2026-11-13",
  "x-method": "derived",
  "x-generator": "derive-json-schema.py",
  "x-source": "openapi/kamai-io-openapi.json#/components/schemas/MarkupUpdate",
  "properties": {
    "version": {
      "type": "integer",
      "minimum": 1.0,
      "title": "Version",
      "description": "The markup's version as last read; a newer one answers conflict."
    },
    "box": {
      "anyOf": [
        {
          "items": {
            "type": "number"
          },
          "type": "array",
          "maxItems": 4,
          "minItems": 4
        },
        {
          "type": "null"
        }
      ],
      "title": "Box",
      "description": "A new box, [x0, y0, x1, y1] fractions of the page (clouds and notes)."
    },
    "points": {
      "anyOf": [
        {
          "items": {
            "items": {
              "type": "number"
            },
            "type": "array"
          },
          "type": "array",
          "maxItems": 2000,
          "minItems": 2
        },
        {
          "type": "null"
        }
      ],
      "title": "Points",
      "description": "A new stroke (highlight) or outline (cloud), [[x, y], ...] fractions of the page."
    },
    "pointer": {
      "anyOf": [
        {
          "items": {
            "type": "number"
          },
          "type": "array",
          "maxItems": 2,
          "minItems": 2
        },
        {
          "type": "null"
        }
      ],
      "title": "Pointer",
      "description": "A note's new arrow tip, [x, y] fractions of the page; the room under it is recorded again."
    },
    "text": {
      "anyOf": [
        {
          "type": "string",
          "maxLength": 2000
        },
        {
          "type": "null"
        }
      ],
      "title": "Text",
      "description": "New text, up to 2,000 characters; a note's cannot be empty."
    },
    "style": {
      "anyOf": [
        {
          "additionalProperties": true,
          "type": "object"
        },
        {
          "type": "null"
        }
      ],
      "title": "Style",
      "description": "Style keys to change (color, width, opacity, font_size); the others are kept."
    }
  },
  "additionalProperties": false,
  "type": "object",
  "required": [
    "version"
  ]
}