{
  "openapi": "3.0.3",
  "info": {
    "title": "Algebrakit Web Service API",
    "version": "2.0.0",
    "x-logo": {
      "url": "https://public.algebrakit.nl/logo_white.png",
      "altText": "Algebrakit Logo"
    },
    "description": "This API allows creating and managing exercise sessions, retrieve session information and scores, and lock or unlock sessions.\n"
  },
  "servers": [
    {
      "url": "https://api.algebrakit.com",
      "description": "Production server (Ireland)"
    },
    {
      "url": "https://prod.api.sg-1.algebrakit.com",
      "description": "Production server (Singapore)"
    }
  ],
  "paths": {
    "/session/create": {
      "post": {
        "summary": "Create sessions",
        "description": "Create new sessions for Algebrakit exercises. Multiple sessions can be created in one call to optimize performance.\nThe response contains a unique session ID for each session. It also offers optimized HTML code which you can insert into your web page. \nThis HTML code includes allows for faster initialization as the web component does not need to retrieve data from the web service.\n",
        "operationId": "sessionCreate",
        "requestBody": {
          "required": true,
          "content": {
            "application/json; charset=utf-8": {
              "schema": {
                "$ref": "#/components/schemas/CreateSessionRequest"
              },
              "examples": {
                "example1": {
                  "$ref": "#/components/examples/CreateSessionRequestExampleMultiple"
                }
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Successful creation of sessions",
            "content": {
              "application/json; charset=utf-8": {
                "schema": {
                  "$ref": "#/components/schemas/CreateSessionResponse"
                },
                "examples": {
                  "example1": {
                    "$ref": "#/components/examples/CreateSessionResponseExample"
                  }
                }
              }
            }
          }
        },
        "security": [
          {
            "ApiKeyAuth": []
          }
        ]
      }
    },
    "/session/retrieve": {
      "post": {
        "summary": "Retrieve sessions",
        "description": "Returns the same session information produced by /session/create, but for for existing sessions. \nUsed to efficiently render the web components for existing sessions.\n\nNote that restoring an existing exercise can be done without using this endpoint, simply by the `akit-exercise` or `akit-interaction` web components:\n```\n<akit-exercise session-id=\"...\"></akit-exercise>\n```\nThe web component will automatically retrieve all needed information (question type, learning events, etc) from the server. \n\nHowever, this roundtrip impacts page load time, \nespecially if multiple exercises are on the page. The `/session/retrieve` endpoint lets you obtain optimized HTML code for multiple sessions in one call. \nInserting this optimized HTML into the webpage prevents a server roundtrip per exercise and allows the exercises to show instantly.\n",
        "operationId": "sessionRetrieve",
        "requestBody": {
          "required": true,
          "content": {
            "application/json; charset=utf-8": {
              "schema": {
                "$ref": "#/components/schemas/SessionRetrieveRequest"
              },
              "examples": {
                "example1": {
                  "$ref": "#/components/examples/SessionRetrieveRequestExample"
                }
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Successfully obtained session data",
            "content": {
              "application/json; charset=utf-8": {
                "schema": {
                  "$ref": "#/components/schemas/SessionRetrieveResponse"
                },
                "examples": {
                  "example1": {
                    "$ref": "#/components/examples/SessionRetrieveResponseExample"
                  }
                }
              }
            }
          }
        },
        "security": [
          {
            "ApiKeyAuth": []
          }
        ]
      }
    },
    "/session/score": {
      "post": {
        "summary": "Get session scores",
        "description": "Retrieve results from an exercise session. This endpoint allows you to get the scores and other details of the session.\nYou can optionally lock the session to prevent any further modifications.\n",
        "operationId": "sessionScore",
        "requestBody": {
          "required": true,
          "content": {
            "application/json; charset=utf-8": {
              "schema": {
                "$ref": "#/components/schemas/SessionScoreRequest"
              },
              "examples": {
                "example1": {
                  "$ref": "#/components/examples/SessionScoreRequestExample"
                }
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Request succeeded",
            "content": {
              "application/json; charset=utf-8": {
                "schema": {
                  "$ref": "#/components/schemas/SessionScoreResponse"
                },
                "examples": {
                  "example1": {
                    "$ref": "#/components/examples/SessionScoreResponseExample"
                  }
                }
              }
            }
          }
        },
        "security": [
          {
            "ApiKeyAuth": []
          }
        ]
      }
    },
    "/sessions/lock": {
      "post": {
        "summary": "(Un)lock sessions.",
        "description": "Lock or unlock exercise sessions. Locked sessions do not allow modifications such as new evaluation events.\nThis functionality is mainly intended for assessments to guarantee nobody changes the results afterward.\n\nThere are two types of lock actions. You can later undo a `LOCK` action with an `UNLOCK` action. A `FINALIZE` action locks a session forever.\n\nYou can lock or unlock a batch of sessions in a single request.\n",
        "operationId": "sessionLock",
        "requestBody": {
          "required": true,
          "content": {
            "application/json; charset=utf-8": {
              "schema": {
                "$ref": "#/components/schemas/SessionLockRequest"
              },
              "examples": {
                "example1": {
                  "$ref": "#/components/examples/SessionLockRequestExample"
                }
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Sessions successfully locked or unlocked",
            "content": {
              "application/json; charset=utf-8": {
                "schema": {
                  "$ref": "#/components/schemas/SessionLockResponse"
                }
              }
            }
          }
        },
        "security": [
          {
            "ApiKeyAuth": []
          }
        ]
      }
    },
    "/session/info": {
      "post": {
        "summary": "Retrieve session info",
        "description": "Retrieve detailed information about a session, including exercise layout, solutions, and scoring results.\nThis endpoint provides human-readable (or AI-readable) information about the session, with enhanced annotation data \nthat includes complete question views with student inputs.\n\nThis endpoint will ultimately replace the `/session/score` endpoint.\n",
        "operationId": "sessionInfo",
        "requestBody": {
          "required": true,
          "content": {
            "application/json; charset=utf-8": {
              "schema": {
                "$ref": "#/components/schemas/SessionInfoRequest"
              },
              "examples": {
                "example1": {
                  "$ref": "#/components/examples/SessionInfoRequestExample"
                }
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Request succeeded",
            "content": {
              "application/json; charset=utf-8": {
                "schema": {
                  "$ref": "#/components/schemas/SessionInfoResponse"
                },
                "examples": {
                  "example1": {
                    "$ref": "#/components/examples/SessionInfoResponseExample"
                  }
                }
              }
            }
          }
        },
        "security": [
          {
            "ApiKeyAuth": []
          }
        ]
      }
    },
    "/exercise/validate": {
      "post": {
        "summary": "Validate exercise",
        "description": "Checks whether an exercise is valid (i.e., that it runs) and obtains general information.",
        "operationId": "exerciseValidate",
        "requestBody": {
          "required": true,
          "content": {
            "application/json; charset=utf-8": {
              "schema": {
                "$ref": "#/components/schemas/ExerciseValidateRequest"
              },
              "examples": {
                "example1": {
                  "$ref": "#/components/examples/ExerciseValidateRequestExample"
                }
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Request was successful",
            "content": {
              "application/json; charset=utf-8": {
                "schema": {
                  "$ref": "#/components/schemas/ExerciseValidateResponse"
                },
                "examples": {
                  "example1": {
                    "$ref": "#/components/examples/ExerciseValidateResponseExample"
                  }
                }
              }
            }
          }
        },
        "security": [
          {
            "ApiKeyAuth": []
          }
        ]
      }
    },
    "/exercise/published-info": {
      "post": {
        "summary": "Retrieve exercise info",
        "description": "Retrieve information about the structure, versions, and history of an exercise in Algebrakit's CMS.\n",
        "operationId": "exerciseInfo",
        "requestBody": {
          "required": true,
          "content": {
            "application/json; charset=utf-8": {
              "schema": {
                "$ref": "#/components/schemas/ExerciseInfoRequest"
              },
              "examples": {
                "example1": {
                  "$ref": "#/components/examples/ExerciseInfoRequestExample"
                }
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Information about the structure of the exercise.",
            "content": {
              "application/json; charset=utf-8": {
                "schema": {
                  "$ref": "#/components/schemas/ExerciseInfoResponse"
                },
                "examples": {
                  "example1": {
                    "$ref": "#/components/examples/ExerciseInfoResponseExample"
                  }
                }
              }
            }
          }
        }
      }
    }
  },
  "components": {
    "securitySchemes": {
      "ApiKeyAuth": {
        "type": "apiKey",
        "in": "header",
        "name": "X-API-KEY"
      }
    },
    "schemas": {
      "IAK_Exercise": {
        "type": "object",
        "properties": {
          "type": {
            "type": "string",
            "const": "AK_Exercise"
          },
          "studentProfile": {
            "type": "string",
            "description": "ID of the student profile, which defines school level, language, etc."
          },
          "symbols": {
            "type": "array",
            "items": {
              "type": "object",
              "properties": {
                "name": {
                  "type": "string",
                  "description": "The notation of the mathematical symbol in LaTeX notation. For example, \"x\", \"\\angle A_{1}\", etc."
                },
                "type": {
                  "type": "string",
                  "enum": [
                    "VARIABLE",
                    "CONSTANT",
                    "FUNCTION",
                    "FREEVARIABLE"
                  ],
                  "description": "The type of the math symbol"
                },
                "synonym": {
                  "description": "An optional synonym for the math symbol. This is required if a symbol has multiple interpretations. E.g. \"m\" can be mass or meter. Defining a synonym allows the exercise author to specify which interpretation to use in the exercise. E.g. \"mMass\" and \"mMeter\"",
                  "type": "string"
                },
                "addToFormulaEditor": {
                  "description": "Whether to add the symbol as a button to the formula editor.",
                  "type": "boolean"
                },
                "notations": {
                  "description": "Alternative notations for the symbol. For example, a line segment \"AB\" can also be written as \"BA\".",
                  "type": "array",
                  "items": {
                    "type": "string"
                  }
                }
              },
              "required": [
                "name",
                "type"
              ],
              "additionalProperties": false
            },
            "description": "List of mathematical symbols (variables, units, functions, etc.) used in the exercise"
          },
          "elements": {
            "type": "array",
            "items": {
              "type": "object",
              "properties": {
                "blocks": {
                  "type": "array",
                  "items": {
                    "oneOf": [
                      {
                        "type": "object",
                        "properties": {
                          "type": {
                            "type": "string",
                            "const": "CONTENT"
                          },
                          "content": {
                            "type": "string",
                            "description": "The content in this block in HTML format and LaTeX notation for math expressions. For example, \"Calculate &lt;latex&gt;x&lt;/latex&gt; if &lt;latex&gt;2x + 3 = 7&lt;/latex&gt;\"."
                          }
                        },
                        "required": [
                          "type",
                          "content"
                        ],
                        "additionalProperties": false
                      },
                      {
                        "type": "object",
                        "properties": {
                          "type": {
                            "type": "string",
                            "const": "INTERACTION"
                          },
                          "interaction": {
                            "oneOf": [
                              {
                                "type": "object",
                                "properties": {
                                  "type": {
                                    "type": "string",
                                    "const": "CHOICE",
                                    "description": "The question type of this interaction, which is \"CHOICE\" for multiple choice questions."
                                  },
                                  "refId": {
                                    "description": "An optional reference ID for this interaction. If not provided, a pseudo ID will be generated.",
                                    "type": "string"
                                  },
                                  "instruction": {
                                    "description": "The instruction or question prompt for this interaction",
                                    "type": "string"
                                  },
                                  "scored": {
                                    "description": "Whether this interaction should be scored or not. Defaults to true.",
                                    "type": "boolean"
                                  },
                                  "hints": {
                                    "description": "An optional list of general hints for this interaction. These are hints to get the student started and will be shown before any successful attempt is made.",
                                    "type": "array",
                                    "items": {
                                      "type": "string"
                                    }
                                  },
                                  "spec": {
                                    "type": "object",
                                    "properties": {
                                      "options": {
                                        "type": "array",
                                        "items": {
                                          "type": "object",
                                          "properties": {
                                            "content": {
                                              "type": "string",
                                              "description": "The content of the choice option in HTML format with LaTeX embedded in &lt;latex&gt;...&lt;/latex&gt; tags."
                                            },
                                            "correct": {
                                              "type": "boolean",
                                              "description": "If true, this option is correct"
                                            }
                                          },
                                          "required": [
                                            "content",
                                            "correct"
                                          ],
                                          "additionalProperties": false
                                        },
                                        "description": "An array of choice options"
                                      },
                                      "shuffle": {
                                        "type": "boolean",
                                        "description": "If true, the options are shuffled"
                                      },
                                      "multipleSelect": {
                                        "type": "boolean",
                                        "description": "If true, multiple options can be selected"
                                      }
                                    },
                                    "required": [
                                      "options",
                                      "shuffle",
                                      "multipleSelect"
                                    ],
                                    "additionalProperties": false
                                  }
                                },
                                "required": [
                                  "type",
                                  "spec"
                                ],
                                "additionalProperties": false
                              },
                              {
                                "type": "object",
                                "properties": {
                                  "type": {
                                    "type": "string",
                                    "const": "FILL_IN_THE_BLANKS",
                                    "description": "The question type of this interaction, which is \"FILL_IN_THE_BLANKS\" for fill-in-the-blank questions."
                                  },
                                  "refId": {
                                    "description": "An optional reference ID for this interaction. If not provided, a pseudo ID will be generated.",
                                    "type": "string"
                                  },
                                  "instruction": {
                                    "description": "The instruction or question prompt for this interaction",
                                    "type": "string"
                                  },
                                  "scored": {
                                    "description": "Whether this interaction should be scored or not. Defaults to true.",
                                    "type": "boolean"
                                  },
                                  "hints": {
                                    "description": "An optional list of general hints for this interaction. These are hints to get the student started and will be shown before any successful attempt is made.",
                                    "type": "array",
                                    "items": {
                                      "type": "string"
                                    }
                                  },
                                  "content": {
                                    "type": "string",
                                    "description": "The content string in HTML with optional embedded LaTeX and placeholders in square brackets for fields. E.g. 'Calculate &lt;latex&gt;\\sqrt{x^2}=&lt;/latex&gt; &lt;blank id=\"B1\"&gt;&lt;/blank&gt;.'"
                                  },
                                  "blanks": {
                                    "type": "array",
                                    "items": {
                                      "type": "object",
                                      "properties": {
                                        "id": {
                                          "type": "string",
                                          "description": "The unique identifier for this blank, used as a placeholder in the content string"
                                        },
                                        "size": {
                                          "type": "string",
                                          "enum": [
                                            "SMALL",
                                            "MEDIUM",
                                            "LARGE"
                                          ],
                                          "description": "The size of the blank field"
                                        },
                                        "type": {
                                          "type": "string",
                                          "enum": [
                                            "EXPRESSION",
                                            "SELECTION"
                                          ],
                                          "description": "The type of the blank field"
                                        },
                                        "input": {
                                          "anyOf": [
                                            {
                                              "type": "object",
                                              "properties": {
                                                "task": {
                                                  "oneOf": [
                                                    {
                                                      "type": "object",
                                                      "properties": {
                                                        "type": {
                                                          "type": "string",
                                                          "const": "SIMPLIFY",
                                                          "description": "Indicates the task is to simplify the given mathematical expression using mathematical and algebraic rules."
                                                        },
                                                        "expression": {
                                                          "type": "string",
                                                          "description": "The LaTeX string representing the mathematical expression to simplify."
                                                        }
                                                      },
                                                      "required": [
                                                        "type",
                                                        "expression"
                                                      ],
                                                      "additionalProperties": false
                                                    },
                                                    {
                                                      "type": "object",
                                                      "properties": {
                                                        "type": {
                                                          "type": "string",
                                                          "const": "SOLVE",
                                                          "description": "Indicates the task is to solve the given equation or inequality for a specific variable."
                                                        },
                                                        "expression": {
                                                          "type": "string",
                                                          "description": "The LaTeX string representing the equation or inequality to solve. For example, \"x^2-4=0\" or \"2x+3>5\"."
                                                        },
                                                        "variable": {
                                                          "type": "string",
                                                          "description": "The variable to solve for, e.g. 'x'"
                                                        },
                                                        "domain": {
                                                          "description": "Optional domain of the solution, written as an inequality, e.g. 'x\\geq 0', '0<x<2\\pi', etc.",
                                                          "type": "string"
                                                        }
                                                      },
                                                      "required": [
                                                        "type",
                                                        "expression",
                                                        "variable"
                                                      ],
                                                      "additionalProperties": false
                                                    },
                                                    {
                                                      "type": "object",
                                                      "properties": {
                                                        "type": {
                                                          "type": "string",
                                                          "const": "SOLVE_SYSTEM",
                                                          "description": "Indicates the task is to solve a system of equations or inequalities for specific variables."
                                                        },
                                                        "variables": {
                                                          "type": "array",
                                                          "items": {
                                                            "type": "string"
                                                          },
                                                          "description": "The variables to solve for, e.g. ['x', 'y']"
                                                        },
                                                        "expression": {
                                                          "type": "string",
                                                          "description": "The LaTeX string representing the system of equations or inequalities in LaTeX. Write the system as a LaTeX set. For example: \"{x+y=1, x-y=2}\"."
                                                        },
                                                        "domain": {
                                                          "description": "Optional domain of the solution, written as an inequality, e.g. 'x\\geq 0', '0<x<2\\pi', etc.",
                                                          "type": "string"
                                                        },
                                                        "restrictVariable": {
                                                          "description": "The variable to solve for. If not given, all variables in the system will be solved for.",
                                                          "type": "string"
                                                        },
                                                        "method": {
                                                          "description": "The method to use for solving the system. If not given, the system will prefer the elimination method.",
                                                          "type": "string",
                                                          "enum": [
                                                            "Eliminate",
                                                            "Substitute",
                                                            "Equate"
                                                          ]
                                                        }
                                                      },
                                                      "required": [
                                                        "type",
                                                        "variables",
                                                        "expression"
                                                      ],
                                                      "additionalProperties": false
                                                    },
                                                    {
                                                      "type": "object",
                                                      "properties": {
                                                        "type": {
                                                          "type": "string",
                                                          "const": "EXPAND",
                                                          "description": "Indicates the task is to expand the given mathematical expression, such as multiplying out brackets and applying exponentiation."
                                                        },
                                                        "expression": {
                                                          "type": "string",
                                                          "description": "The LaTeX string representing the mathematical expression to expand."
                                                        }
                                                      },
                                                      "required": [
                                                        "type",
                                                        "expression"
                                                      ],
                                                      "additionalProperties": false
                                                    },
                                                    {
                                                      "type": "object",
                                                      "properties": {
                                                        "type": {
                                                          "type": "string",
                                                          "const": "FACTOR",
                                                          "description": "Indicates the task is to factor the given mathematical expression, such as taking out common factors and factorising quadratics."
                                                        },
                                                        "expression": {
                                                          "type": "string",
                                                          "description": "The LaTeX string representing the mathematical expression to factor."
                                                        }
                                                      },
                                                      "required": [
                                                        "type",
                                                        "expression"
                                                      ],
                                                      "additionalProperties": false
                                                    },
                                                    {
                                                      "type": "object",
                                                      "properties": {
                                                        "type": {
                                                          "type": "string",
                                                          "const": "TOGETHER",
                                                          "description": "Indicates the task is to combine a sum of fractions into a single fraction."
                                                        },
                                                        "expression": {
                                                          "type": "string",
                                                          "description": "The LaTeX string representing the sum of fractions to combine into a single fraction."
                                                        }
                                                      },
                                                      "required": [
                                                        "type",
                                                        "expression"
                                                      ],
                                                      "additionalProperties": false
                                                    },
                                                    {
                                                      "type": "object",
                                                      "properties": {
                                                        "type": {
                                                          "type": "string",
                                                          "const": "COMPLETE_SQUARE",
                                                          "description": "Indicates the task is to complete the square for a quadratic expression with respect to a specific variable."
                                                        },
                                                        "variable": {
                                                          "type": "string",
                                                          "description": "The variable to complete the square for, e.g. 'x'"
                                                        },
                                                        "expression": {
                                                          "type": "string",
                                                          "description": "The LaTeX string representing the quadratic expression to complete the square for."
                                                        }
                                                      },
                                                      "required": [
                                                        "type",
                                                        "variable",
                                                        "expression"
                                                      ],
                                                      "additionalProperties": false
                                                    },
                                                    {
                                                      "type": "object",
                                                      "properties": {
                                                        "type": {
                                                          "type": "string",
                                                          "const": "POLYNOMIAL_STANDARD_FORM",
                                                          "description": "Indicates the task is to convert a polynomial expression to its standard form. This involves expanding the expression and then rearranging it in descending powers of the specified variable."
                                                        },
                                                        "expression": {
                                                          "type": "string",
                                                          "description": "The LaTeX string representing the polynomial expression to convert to standard form."
                                                        },
                                                        "variable": {
                                                          "type": "string",
                                                          "description": "The variable to convert to standard form, e.g. 'x'"
                                                        }
                                                      },
                                                      "required": [
                                                        "type",
                                                        "expression",
                                                        "variable"
                                                      ],
                                                      "additionalProperties": false
                                                    },
                                                    {
                                                      "type": "object",
                                                      "properties": {
                                                        "type": {
                                                          "type": "string",
                                                          "const": "POWER_STANDARD_FORM",
                                                          "description": "Indicates the task is to convert a power expression to its standard form. This involves rewriting radicals and fractions into exponent form."
                                                        },
                                                        "expression": {
                                                          "type": "string",
                                                          "description": "The LaTeX string representing the power expression to convert to standard form."
                                                        },
                                                        "variable": {
                                                          "type": "string",
                                                          "description": "The variable to convert to standard form, e.g. 'x'"
                                                        }
                                                      },
                                                      "required": [
                                                        "type",
                                                        "expression",
                                                        "variable"
                                                      ],
                                                      "additionalProperties": false
                                                    },
                                                    {
                                                      "type": "object",
                                                      "properties": {
                                                        "type": {
                                                          "type": "string",
                                                          "const": "EXPONENTIAL_STANDARD_FORM",
                                                          "description": "Indicates the task is to convert an exponential expression to its standard form $b\\cdot g^x$."
                                                        },
                                                        "variable": {
                                                          "type": "string",
                                                          "description": "The variable to convert to standard form, e.g. 'x'"
                                                        },
                                                        "expression": {
                                                          "type": "string",
                                                          "description": "The LaTeX string representing the exponential expression to convert to standard form."
                                                        }
                                                      },
                                                      "required": [
                                                        "type",
                                                        "variable",
                                                        "expression"
                                                      ],
                                                      "additionalProperties": false
                                                    },
                                                    {
                                                      "type": "object",
                                                      "properties": {
                                                        "type": {
                                                          "type": "string",
                                                          "const": "CARTESIAN_TO_POLAR_FORM",
                                                          "description": "Indicates the task is to convert Cartesian coordinates to polar coordinates."
                                                        },
                                                        "expression": {
                                                          "type": "string",
                                                          "description": "The LaTeX string representing the Cartesian coordinates to convert to polar coordinates."
                                                        }
                                                      },
                                                      "required": [
                                                        "type",
                                                        "expression"
                                                      ],
                                                      "additionalProperties": false
                                                    },
                                                    {
                                                      "type": "object",
                                                      "properties": {
                                                        "type": {
                                                          "type": "string",
                                                          "const": "POLAR_TO_CARTESIAN_FORM",
                                                          "description": "Indicates the task is to convert polar coordinates to Cartesian coordinates."
                                                        },
                                                        "expression": {
                                                          "type": "string",
                                                          "description": "The LaTeX string representing the polar coordinates to convert to Cartesian coordinates."
                                                        }
                                                      },
                                                      "required": [
                                                        "type",
                                                        "expression"
                                                      ],
                                                      "additionalProperties": false
                                                    }
                                                  ],
                                                  "description": "The task that the student needs to perform for this expression part. This defines what the student is expected to do with the given expression, such as simplifying it, factoring it, or converting it to a different form."
                                                },
                                                "unit": {
                                                  "description": "An optional unit associated with the expression",
                                                  "type": "object",
                                                  "properties": {
                                                    "unit": {
                                                      "type": "string",
                                                      "description": "The specific unit that the student's answer should be in. This can be a standard unit like \"\\frac{m}{s}\" or \"kg\", or a more complex unit expression."
                                                    },
                                                    "allowEquivalentUnits": {
                                                      "description": "Whether to allow equivalent units (e.g., \"\\frac{m}{s}\" and \"\\frac{km}{h}\" could be considered equivalent if allowEquivalentUnits is true). If false or not provided, only the specified unit will be accepted.",
                                                      "type": "boolean"
                                                    },
                                                    "override": {
                                                      "description": "Whether to override the unit inferred from the task. If true, the specified unit will be used for evaluation regardless of any units mentioned in the task.",
                                                      "type": "boolean"
                                                    }
                                                  },
                                                  "required": [
                                                    "unit"
                                                  ],
                                                  "additionalProperties": false
                                                },
                                                "accuracy": {
                                                  "description": "An optional accuracy specification that defines how to evaluate the student's answer for this expression part. If not provided, a default evaluation method will be used.",
                                                  "type": "object",
                                                  "properties": {
                                                    "type": {
                                                      "type": "string",
                                                      "enum": [
                                                        "ROUND",
                                                        "ROUND_UP",
                                                        "ROUND_DOWN",
                                                        "ACCURATE",
                                                        "PRECISION"
                                                      ],
                                                      "description": "The type of accuracy to be applied. 'ROUND' means standard rounding to a specified number of decimal places. 'ROUND_UP' means rounding up (ceiling) to a specified number of decimal places. 'ROUND_DOWN' means rounding down (floor) to a specified number of decimal places. 'ACCURATE' means that the answer must be accurate with AT LEAST the specified number of decimal places. 'PRECISION' means that the student's answer must have a specified number of significant digits, regardless of the number of decimal places."
                                                    },
                                                    "nr": {
                                                      "type": "number",
                                                      "description": "The numerical value associated with the accuracy"
                                                    },
                                                    "keepDecimalZeros": {
                                                      "description": "Whether to keep trailing zeros in decimal answers. Applies when type is 'ROUND', 'ACCURATE', 'ROUND_UP', or 'ROUND_DOWN'. If true, answers will be formatted to have exactly 'nr' decimal places, even if that means adding trailing zeros. If false or not provided, trailing zeros will be omitted.",
                                                      "type": "boolean"
                                                    }
                                                  },
                                                  "required": [
                                                    "type",
                                                    "nr"
                                                  ],
                                                  "additionalProperties": false
                                                },
                                                "form": {
                                                  "description": "An optional specification of the expected form of the student's answer for this expression part.",
                                                  "type": "object",
                                                  "properties": {
                                                    "numbers": {
                                                      "type": "string",
                                                      "enum": [
                                                        "DECIMAL_REQUIRED",
                                                        "DECIMAL_PREFERRED",
                                                        "FRACTION_REQUIRED",
                                                        "FRACTION_PREFERRED",
                                                        "SCIENTIFIC_NOTATION_REQUIRED",
                                                        "SCIENTIFIC_NOTATION_PREFERRED"
                                                      ]
                                                    },
                                                    "radicals": {
                                                      "type": "string",
                                                      "enum": [
                                                        "STANDARD_FORM_REQUIRED"
                                                      ]
                                                    },
                                                    "fractions": {
                                                      "type": "string",
                                                      "enum": [
                                                        "MIXED_FRACTION_REQUIRED",
                                                        "IMPROPER_FRACTION_REQUIRED"
                                                      ]
                                                    }
                                                  },
                                                  "additionalProperties": false
                                                }
                                              },
                                              "required": [
                                                "task"
                                              ],
                                              "additionalProperties": false
                                            },
                                            {
                                              "type": "object",
                                              "properties": {
                                                "options": {
                                                  "type": "array",
                                                  "items": {
                                                    "type": "object",
                                                    "properties": {
                                                      "content": {
                                                        "type": "string",
                                                        "description": "The content of the choice option in HTML format with LaTeX embedded in &lt;latex&gt;...&lt;/latex&gt; tags."
                                                      },
                                                      "correct": {
                                                        "type": "boolean",
                                                        "description": "If true, this option is correct"
                                                      }
                                                    },
                                                    "required": [
                                                      "content",
                                                      "correct"
                                                    ],
                                                    "additionalProperties": false
                                                  },
                                                  "description": "An array of choice options"
                                                },
                                                "shuffle": {
                                                  "type": "boolean",
                                                  "description": "If true, the options are shuffled"
                                                },
                                                "multipleSelect": {
                                                  "type": "boolean",
                                                  "description": "If true, multiple options can be selected"
                                                }
                                              },
                                              "required": [
                                                "options",
                                                "shuffle",
                                                "multipleSelect"
                                              ],
                                              "additionalProperties": false
                                            }
                                          ],
                                          "description": "The specification for the input field associated with this blank"
                                        }
                                      },
                                      "required": [
                                        "id",
                                        "size",
                                        "type",
                                        "input"
                                      ],
                                      "additionalProperties": false
                                    },
                                    "description": "An array of blank specifications, each defining a field in the content string"
                                  },
                                  "interchangables": {
                                    "description": "Defines which expression blanks are interchangeable. Each inner array contains symbols that are interchangeable. For example, [['B1', 'B2'], ['B3', 'B4', 'B5']] means that B1 and B2 are interchangeable, and B3, B4, B5 are interchangeable.",
                                    "type": "array",
                                    "items": {
                                      "type": "array",
                                      "items": {
                                        "type": "string"
                                      }
                                    }
                                  }
                                },
                                "required": [
                                  "type",
                                  "content",
                                  "blanks"
                                ],
                                "additionalProperties": false
                              },
                              {
                                "type": "object",
                                "properties": {
                                  "type": {
                                    "type": "string",
                                    "const": "MULTISTEP",
                                    "description": "The question type of this interaction, which is \"MULTISTEP\" for algebraic multi-step questions."
                                  },
                                  "refId": {
                                    "description": "An optional reference ID for this interaction. If not provided, a pseudo ID will be generated.",
                                    "type": "string"
                                  },
                                  "instruction": {
                                    "description": "The instruction or question prompt for this interaction",
                                    "type": "string"
                                  },
                                  "scored": {
                                    "description": "Whether this interaction should be scored or not. Defaults to true.",
                                    "type": "boolean"
                                  },
                                  "hints": {
                                    "description": "An optional list of general hints for this interaction. These are hints to get the student started and will be shown before any successful attempt is made.",
                                    "type": "array",
                                    "items": {
                                      "type": "string"
                                    }
                                  },
                                  "givenParts": {
                                    "description": "Optional given information that is provided to the student in the instruction. The keys are labels like 'G1', 'G2', etc. that can be referenced for expressions in other parts.'",
                                    "type": "object",
                                    "propertyNames": {
                                      "type": "string"
                                    },
                                    "additionalProperties": {
                                      "type": "object",
                                      "properties": {
                                        "task": {
                                          "oneOf": [
                                            {
                                              "type": "object",
                                              "properties": {
                                                "type": {
                                                  "type": "string",
                                                  "const": "SIMPLIFY",
                                                  "description": "Indicates the task is to simplify the given mathematical expression using mathematical and algebraic rules."
                                                },
                                                "expression": {
                                                  "type": "string",
                                                  "description": "The LaTeX string representing the mathematical expression to simplify."
                                                }
                                              },
                                              "required": [
                                                "type",
                                                "expression"
                                              ],
                                              "additionalProperties": false
                                            },
                                            {
                                              "type": "object",
                                              "properties": {
                                                "type": {
                                                  "type": "string",
                                                  "const": "SOLVE",
                                                  "description": "Indicates the task is to solve the given equation or inequality for a specific variable."
                                                },
                                                "expression": {
                                                  "type": "string",
                                                  "description": "The LaTeX string representing the equation or inequality to solve. For example, \"x^2-4=0\" or \"2x+3>5\"."
                                                },
                                                "variable": {
                                                  "type": "string",
                                                  "description": "The variable to solve for, e.g. 'x'"
                                                },
                                                "domain": {
                                                  "description": "Optional domain of the solution, written as an inequality, e.g. 'x\\geq 0', '0<x<2\\pi', etc.",
                                                  "type": "string"
                                                }
                                              },
                                              "required": [
                                                "type",
                                                "expression",
                                                "variable"
                                              ],
                                              "additionalProperties": false
                                            },
                                            {
                                              "type": "object",
                                              "properties": {
                                                "type": {
                                                  "type": "string",
                                                  "const": "SOLVE_SYSTEM",
                                                  "description": "Indicates the task is to solve a system of equations or inequalities for specific variables."
                                                },
                                                "variables": {
                                                  "type": "array",
                                                  "items": {
                                                    "type": "string"
                                                  },
                                                  "description": "The variables to solve for, e.g. ['x', 'y']"
                                                },
                                                "expression": {
                                                  "type": "string",
                                                  "description": "The LaTeX string representing the system of equations or inequalities in LaTeX. Write the system as a LaTeX set. For example: \"{x+y=1, x-y=2}\"."
                                                },
                                                "domain": {
                                                  "description": "Optional domain of the solution, written as an inequality, e.g. 'x\\geq 0', '0<x<2\\pi', etc.",
                                                  "type": "string"
                                                },
                                                "restrictVariable": {
                                                  "description": "The variable to solve for. If not given, all variables in the system will be solved for.",
                                                  "type": "string"
                                                },
                                                "method": {
                                                  "description": "The method to use for solving the system. If not given, the system will prefer the elimination method.",
                                                  "type": "string",
                                                  "enum": [
                                                    "Eliminate",
                                                    "Substitute",
                                                    "Equate"
                                                  ]
                                                }
                                              },
                                              "required": [
                                                "type",
                                                "variables",
                                                "expression"
                                              ],
                                              "additionalProperties": false
                                            },
                                            {
                                              "type": "object",
                                              "properties": {
                                                "type": {
                                                  "type": "string",
                                                  "const": "EXPAND",
                                                  "description": "Indicates the task is to expand the given mathematical expression, such as multiplying out brackets and applying exponentiation."
                                                },
                                                "expression": {
                                                  "type": "string",
                                                  "description": "The LaTeX string representing the mathematical expression to expand."
                                                }
                                              },
                                              "required": [
                                                "type",
                                                "expression"
                                              ],
                                              "additionalProperties": false
                                            },
                                            {
                                              "type": "object",
                                              "properties": {
                                                "type": {
                                                  "type": "string",
                                                  "const": "FACTOR",
                                                  "description": "Indicates the task is to factor the given mathematical expression, such as taking out common factors and factorising quadratics."
                                                },
                                                "expression": {
                                                  "type": "string",
                                                  "description": "The LaTeX string representing the mathematical expression to factor."
                                                }
                                              },
                                              "required": [
                                                "type",
                                                "expression"
                                              ],
                                              "additionalProperties": false
                                            },
                                            {
                                              "type": "object",
                                              "properties": {
                                                "type": {
                                                  "type": "string",
                                                  "const": "TOGETHER",
                                                  "description": "Indicates the task is to combine a sum of fractions into a single fraction."
                                                },
                                                "expression": {
                                                  "type": "string",
                                                  "description": "The LaTeX string representing the sum of fractions to combine into a single fraction."
                                                }
                                              },
                                              "required": [
                                                "type",
                                                "expression"
                                              ],
                                              "additionalProperties": false
                                            },
                                            {
                                              "type": "object",
                                              "properties": {
                                                "type": {
                                                  "type": "string",
                                                  "const": "COMPLETE_SQUARE",
                                                  "description": "Indicates the task is to complete the square for a quadratic expression with respect to a specific variable."
                                                },
                                                "variable": {
                                                  "type": "string",
                                                  "description": "The variable to complete the square for, e.g. 'x'"
                                                },
                                                "expression": {
                                                  "type": "string",
                                                  "description": "The LaTeX string representing the quadratic expression to complete the square for."
                                                }
                                              },
                                              "required": [
                                                "type",
                                                "variable",
                                                "expression"
                                              ],
                                              "additionalProperties": false
                                            },
                                            {
                                              "type": "object",
                                              "properties": {
                                                "type": {
                                                  "type": "string",
                                                  "const": "POLYNOMIAL_STANDARD_FORM",
                                                  "description": "Indicates the task is to convert a polynomial expression to its standard form. This involves expanding the expression and then rearranging it in descending powers of the specified variable."
                                                },
                                                "expression": {
                                                  "type": "string",
                                                  "description": "The LaTeX string representing the polynomial expression to convert to standard form."
                                                },
                                                "variable": {
                                                  "type": "string",
                                                  "description": "The variable to convert to standard form, e.g. 'x'"
                                                }
                                              },
                                              "required": [
                                                "type",
                                                "expression",
                                                "variable"
                                              ],
                                              "additionalProperties": false
                                            },
                                            {
                                              "type": "object",
                                              "properties": {
                                                "type": {
                                                  "type": "string",
                                                  "const": "POWER_STANDARD_FORM",
                                                  "description": "Indicates the task is to convert a power expression to its standard form. This involves rewriting radicals and fractions into exponent form."
                                                },
                                                "expression": {
                                                  "type": "string",
                                                  "description": "The LaTeX string representing the power expression to convert to standard form."
                                                },
                                                "variable": {
                                                  "type": "string",
                                                  "description": "The variable to convert to standard form, e.g. 'x'"
                                                }
                                              },
                                              "required": [
                                                "type",
                                                "expression",
                                                "variable"
                                              ],
                                              "additionalProperties": false
                                            },
                                            {
                                              "type": "object",
                                              "properties": {
                                                "type": {
                                                  "type": "string",
                                                  "const": "EXPONENTIAL_STANDARD_FORM",
                                                  "description": "Indicates the task is to convert an exponential expression to its standard form $b\\cdot g^x$."
                                                },
                                                "variable": {
                                                  "type": "string",
                                                  "description": "The variable to convert to standard form, e.g. 'x'"
                                                },
                                                "expression": {
                                                  "type": "string",
                                                  "description": "The LaTeX string representing the exponential expression to convert to standard form."
                                                }
                                              },
                                              "required": [
                                                "type",
                                                "variable",
                                                "expression"
                                              ],
                                              "additionalProperties": false
                                            },
                                            {
                                              "type": "object",
                                              "properties": {
                                                "type": {
                                                  "type": "string",
                                                  "const": "CARTESIAN_TO_POLAR_FORM",
                                                  "description": "Indicates the task is to convert Cartesian coordinates to polar coordinates."
                                                },
                                                "expression": {
                                                  "type": "string",
                                                  "description": "The LaTeX string representing the Cartesian coordinates to convert to polar coordinates."
                                                }
                                              },
                                              "required": [
                                                "type",
                                                "expression"
                                              ],
                                              "additionalProperties": false
                                            },
                                            {
                                              "type": "object",
                                              "properties": {
                                                "type": {
                                                  "type": "string",
                                                  "const": "POLAR_TO_CARTESIAN_FORM",
                                                  "description": "Indicates the task is to convert polar coordinates to Cartesian coordinates."
                                                },
                                                "expression": {
                                                  "type": "string",
                                                  "description": "The LaTeX string representing the polar coordinates to convert to Cartesian coordinates."
                                                }
                                              },
                                              "required": [
                                                "type",
                                                "expression"
                                              ],
                                              "additionalProperties": false
                                            }
                                          ],
                                          "description": "The task that the student needs to perform for this expression part. This defines what the student is expected to do with the given expression, such as simplifying it, factoring it, or converting it to a different form."
                                        },
                                        "unit": {
                                          "description": "An optional unit associated with the expression",
                                          "type": "object",
                                          "properties": {
                                            "unit": {
                                              "type": "string",
                                              "description": "The specific unit that the student's answer should be in. This can be a standard unit like \"\\frac{m}{s}\" or \"kg\", or a more complex unit expression."
                                            },
                                            "allowEquivalentUnits": {
                                              "description": "Whether to allow equivalent units (e.g., \"\\frac{m}{s}\" and \"\\frac{km}{h}\" could be considered equivalent if allowEquivalentUnits is true). If false or not provided, only the specified unit will be accepted.",
                                              "type": "boolean"
                                            },
                                            "override": {
                                              "description": "Whether to override the unit inferred from the task. If true, the specified unit will be used for evaluation regardless of any units mentioned in the task.",
                                              "type": "boolean"
                                            }
                                          },
                                          "required": [
                                            "unit"
                                          ],
                                          "additionalProperties": false
                                        },
                                        "accuracy": {
                                          "description": "An optional accuracy specification that defines how to evaluate the student's answer for this expression part. If not provided, a default evaluation method will be used.",
                                          "type": "object",
                                          "properties": {
                                            "type": {
                                              "type": "string",
                                              "enum": [
                                                "ROUND",
                                                "ROUND_UP",
                                                "ROUND_DOWN",
                                                "ACCURATE",
                                                "PRECISION"
                                              ],
                                              "description": "The type of accuracy to be applied. 'ROUND' means standard rounding to a specified number of decimal places. 'ROUND_UP' means rounding up (ceiling) to a specified number of decimal places. 'ROUND_DOWN' means rounding down (floor) to a specified number of decimal places. 'ACCURATE' means that the answer must be accurate with AT LEAST the specified number of decimal places. 'PRECISION' means that the student's answer must have a specified number of significant digits, regardless of the number of decimal places."
                                            },
                                            "nr": {
                                              "type": "number",
                                              "description": "The numerical value associated with the accuracy"
                                            },
                                            "keepDecimalZeros": {
                                              "description": "Whether to keep trailing zeros in decimal answers. Applies when type is 'ROUND', 'ACCURATE', 'ROUND_UP', or 'ROUND_DOWN'. If true, answers will be formatted to have exactly 'nr' decimal places, even if that means adding trailing zeros. If false or not provided, trailing zeros will be omitted.",
                                              "type": "boolean"
                                            }
                                          },
                                          "required": [
                                            "type",
                                            "nr"
                                          ],
                                          "additionalProperties": false
                                        },
                                        "form": {
                                          "description": "An optional specification of the expected form of the student's answer for this expression part.",
                                          "type": "object",
                                          "properties": {
                                            "numbers": {
                                              "type": "string",
                                              "enum": [
                                                "DECIMAL_REQUIRED",
                                                "DECIMAL_PREFERRED",
                                                "FRACTION_REQUIRED",
                                                "FRACTION_PREFERRED",
                                                "SCIENTIFIC_NOTATION_REQUIRED",
                                                "SCIENTIFIC_NOTATION_PREFERRED"
                                              ]
                                            },
                                            "radicals": {
                                              "type": "string",
                                              "enum": [
                                                "STANDARD_FORM_REQUIRED"
                                              ]
                                            },
                                            "fractions": {
                                              "type": "string",
                                              "enum": [
                                                "MIXED_FRACTION_REQUIRED",
                                                "IMPROPER_FRACTION_REQUIRED"
                                              ]
                                            }
                                          },
                                          "additionalProperties": false
                                        },
                                        "symbol": {
                                          "description": "An optional variable or function that represents this part. E.g. \"E\" if this part represents energy, or \"f(x)\" if it represents a function definition.",
                                          "type": "string"
                                        },
                                        "description": {
                                          "description": "An description of what this part represents. E.g \"the total discount\"",
                                          "type": "string"
                                        },
                                        "alternativeTasks": {
                                          "description": "An optional array of alternative tasks that are also accepted as correct answers for this part.",
                                          "type": "array",
                                          "items": {
                                            "oneOf": [
                                              {
                                                "type": "object",
                                                "properties": {
                                                  "type": {
                                                    "type": "string",
                                                    "const": "SIMPLIFY",
                                                    "description": "Indicates the task is to simplify the given mathematical expression using mathematical and algebraic rules."
                                                  },
                                                  "expression": {
                                                    "type": "string",
                                                    "description": "The LaTeX string representing the mathematical expression to simplify."
                                                  }
                                                },
                                                "required": [
                                                  "type",
                                                  "expression"
                                                ],
                                                "additionalProperties": false
                                              },
                                              {
                                                "type": "object",
                                                "properties": {
                                                  "type": {
                                                    "type": "string",
                                                    "const": "SOLVE",
                                                    "description": "Indicates the task is to solve the given equation or inequality for a specific variable."
                                                  },
                                                  "expression": {
                                                    "type": "string",
                                                    "description": "The LaTeX string representing the equation or inequality to solve. For example, \"x^2-4=0\" or \"2x+3>5\"."
                                                  },
                                                  "variable": {
                                                    "type": "string",
                                                    "description": "The variable to solve for, e.g. 'x'"
                                                  },
                                                  "domain": {
                                                    "description": "Optional domain of the solution, written as an inequality, e.g. 'x\\geq 0', '0<x<2\\pi', etc.",
                                                    "type": "string"
                                                  }
                                                },
                                                "required": [
                                                  "type",
                                                  "expression",
                                                  "variable"
                                                ],
                                                "additionalProperties": false
                                              },
                                              {
                                                "type": "object",
                                                "properties": {
                                                  "type": {
                                                    "type": "string",
                                                    "const": "SOLVE_SYSTEM",
                                                    "description": "Indicates the task is to solve a system of equations or inequalities for specific variables."
                                                  },
                                                  "variables": {
                                                    "type": "array",
                                                    "items": {
                                                      "type": "string"
                                                    },
                                                    "description": "The variables to solve for, e.g. ['x', 'y']"
                                                  },
                                                  "expression": {
                                                    "type": "string",
                                                    "description": "The LaTeX string representing the system of equations or inequalities in LaTeX. Write the system as a LaTeX set. For example: \"{x+y=1, x-y=2}\"."
                                                  },
                                                  "domain": {
                                                    "description": "Optional domain of the solution, written as an inequality, e.g. 'x\\geq 0', '0<x<2\\pi', etc.",
                                                    "type": "string"
                                                  },
                                                  "restrictVariable": {
                                                    "description": "The variable to solve for. If not given, all variables in the system will be solved for.",
                                                    "type": "string"
                                                  },
                                                  "method": {
                                                    "description": "The method to use for solving the system. If not given, the system will prefer the elimination method.",
                                                    "type": "string",
                                                    "enum": [
                                                      "Eliminate",
                                                      "Substitute",
                                                      "Equate"
                                                    ]
                                                  }
                                                },
                                                "required": [
                                                  "type",
                                                  "variables",
                                                  "expression"
                                                ],
                                                "additionalProperties": false
                                              },
                                              {
                                                "type": "object",
                                                "properties": {
                                                  "type": {
                                                    "type": "string",
                                                    "const": "EXPAND",
                                                    "description": "Indicates the task is to expand the given mathematical expression, such as multiplying out brackets and applying exponentiation."
                                                  },
                                                  "expression": {
                                                    "type": "string",
                                                    "description": "The LaTeX string representing the mathematical expression to expand."
                                                  }
                                                },
                                                "required": [
                                                  "type",
                                                  "expression"
                                                ],
                                                "additionalProperties": false
                                              },
                                              {
                                                "type": "object",
                                                "properties": {
                                                  "type": {
                                                    "type": "string",
                                                    "const": "FACTOR",
                                                    "description": "Indicates the task is to factor the given mathematical expression, such as taking out common factors and factorising quadratics."
                                                  },
                                                  "expression": {
                                                    "type": "string",
                                                    "description": "The LaTeX string representing the mathematical expression to factor."
                                                  }
                                                },
                                                "required": [
                                                  "type",
                                                  "expression"
                                                ],
                                                "additionalProperties": false
                                              },
                                              {
                                                "type": "object",
                                                "properties": {
                                                  "type": {
                                                    "type": "string",
                                                    "const": "TOGETHER",
                                                    "description": "Indicates the task is to combine a sum of fractions into a single fraction."
                                                  },
                                                  "expression": {
                                                    "type": "string",
                                                    "description": "The LaTeX string representing the sum of fractions to combine into a single fraction."
                                                  }
                                                },
                                                "required": [
                                                  "type",
                                                  "expression"
                                                ],
                                                "additionalProperties": false
                                              },
                                              {
                                                "type": "object",
                                                "properties": {
                                                  "type": {
                                                    "type": "string",
                                                    "const": "COMPLETE_SQUARE",
                                                    "description": "Indicates the task is to complete the square for a quadratic expression with respect to a specific variable."
                                                  },
                                                  "variable": {
                                                    "type": "string",
                                                    "description": "The variable to complete the square for, e.g. 'x'"
                                                  },
                                                  "expression": {
                                                    "type": "string",
                                                    "description": "The LaTeX string representing the quadratic expression to complete the square for."
                                                  }
                                                },
                                                "required": [
                                                  "type",
                                                  "variable",
                                                  "expression"
                                                ],
                                                "additionalProperties": false
                                              },
                                              {
                                                "type": "object",
                                                "properties": {
                                                  "type": {
                                                    "type": "string",
                                                    "const": "POLYNOMIAL_STANDARD_FORM",
                                                    "description": "Indicates the task is to convert a polynomial expression to its standard form. This involves expanding the expression and then rearranging it in descending powers of the specified variable."
                                                  },
                                                  "expression": {
                                                    "type": "string",
                                                    "description": "The LaTeX string representing the polynomial expression to convert to standard form."
                                                  },
                                                  "variable": {
                                                    "type": "string",
                                                    "description": "The variable to convert to standard form, e.g. 'x'"
                                                  }
                                                },
                                                "required": [
                                                  "type",
                                                  "expression",
                                                  "variable"
                                                ],
                                                "additionalProperties": false
                                              },
                                              {
                                                "type": "object",
                                                "properties": {
                                                  "type": {
                                                    "type": "string",
                                                    "const": "POWER_STANDARD_FORM",
                                                    "description": "Indicates the task is to convert a power expression to its standard form. This involves rewriting radicals and fractions into exponent form."
                                                  },
                                                  "expression": {
                                                    "type": "string",
                                                    "description": "The LaTeX string representing the power expression to convert to standard form."
                                                  },
                                                  "variable": {
                                                    "type": "string",
                                                    "description": "The variable to convert to standard form, e.g. 'x'"
                                                  }
                                                },
                                                "required": [
                                                  "type",
                                                  "expression",
                                                  "variable"
                                                ],
                                                "additionalProperties": false
                                              },
                                              {
                                                "type": "object",
                                                "properties": {
                                                  "type": {
                                                    "type": "string",
                                                    "const": "EXPONENTIAL_STANDARD_FORM",
                                                    "description": "Indicates the task is to convert an exponential expression to its standard form $b\\cdot g^x$."
                                                  },
                                                  "variable": {
                                                    "type": "string",
                                                    "description": "The variable to convert to standard form, e.g. 'x'"
                                                  },
                                                  "expression": {
                                                    "type": "string",
                                                    "description": "The LaTeX string representing the exponential expression to convert to standard form."
                                                  }
                                                },
                                                "required": [
                                                  "type",
                                                  "variable",
                                                  "expression"
                                                ],
                                                "additionalProperties": false
                                              },
                                              {
                                                "type": "object",
                                                "properties": {
                                                  "type": {
                                                    "type": "string",
                                                    "const": "CARTESIAN_TO_POLAR_FORM",
                                                    "description": "Indicates the task is to convert Cartesian coordinates to polar coordinates."
                                                  },
                                                  "expression": {
                                                    "type": "string",
                                                    "description": "The LaTeX string representing the Cartesian coordinates to convert to polar coordinates."
                                                  }
                                                },
                                                "required": [
                                                  "type",
                                                  "expression"
                                                ],
                                                "additionalProperties": false
                                              },
                                              {
                                                "type": "object",
                                                "properties": {
                                                  "type": {
                                                    "type": "string",
                                                    "const": "POLAR_TO_CARTESIAN_FORM",
                                                    "description": "Indicates the task is to convert polar coordinates to Cartesian coordinates."
                                                  },
                                                  "expression": {
                                                    "type": "string",
                                                    "description": "The LaTeX string representing the polar coordinates to convert to Cartesian coordinates."
                                                  }
                                                },
                                                "required": [
                                                  "type",
                                                  "expression"
                                                ],
                                                "additionalProperties": false
                                              }
                                            ],
                                            "description": "A task that defines what the student is expected to do."
                                          }
                                        }
                                      },
                                      "required": [
                                        "task"
                                      ],
                                      "additionalProperties": false
                                    }
                                  },
                                  "intermediateParts": {
                                    "description": "Optional intermediate results the student must calculate to solve the problem. The keys are labels like 'S1', 'S2', etc. that can be referenced for expressions in other parts.",
                                    "type": "object",
                                    "propertyNames": {
                                      "type": "string"
                                    },
                                    "additionalProperties": {
                                      "type": "object",
                                      "properties": {
                                        "task": {
                                          "oneOf": [
                                            {
                                              "type": "object",
                                              "properties": {
                                                "type": {
                                                  "type": "string",
                                                  "const": "SIMPLIFY",
                                                  "description": "Indicates the task is to simplify the given mathematical expression using mathematical and algebraic rules."
                                                },
                                                "expression": {
                                                  "type": "string",
                                                  "description": "The LaTeX string representing the mathematical expression to simplify."
                                                }
                                              },
                                              "required": [
                                                "type",
                                                "expression"
                                              ],
                                              "additionalProperties": false
                                            },
                                            {
                                              "type": "object",
                                              "properties": {
                                                "type": {
                                                  "type": "string",
                                                  "const": "SOLVE",
                                                  "description": "Indicates the task is to solve the given equation or inequality for a specific variable."
                                                },
                                                "expression": {
                                                  "type": "string",
                                                  "description": "The LaTeX string representing the equation or inequality to solve. For example, \"x^2-4=0\" or \"2x+3>5\"."
                                                },
                                                "variable": {
                                                  "type": "string",
                                                  "description": "The variable to solve for, e.g. 'x'"
                                                },
                                                "domain": {
                                                  "description": "Optional domain of the solution, written as an inequality, e.g. 'x\\geq 0', '0<x<2\\pi', etc.",
                                                  "type": "string"
                                                }
                                              },
                                              "required": [
                                                "type",
                                                "expression",
                                                "variable"
                                              ],
                                              "additionalProperties": false
                                            },
                                            {
                                              "type": "object",
                                              "properties": {
                                                "type": {
                                                  "type": "string",
                                                  "const": "SOLVE_SYSTEM",
                                                  "description": "Indicates the task is to solve a system of equations or inequalities for specific variables."
                                                },
                                                "variables": {
                                                  "type": "array",
                                                  "items": {
                                                    "type": "string"
                                                  },
                                                  "description": "The variables to solve for, e.g. ['x', 'y']"
                                                },
                                                "expression": {
                                                  "type": "string",
                                                  "description": "The LaTeX string representing the system of equations or inequalities in LaTeX. Write the system as a LaTeX set. For example: \"{x+y=1, x-y=2}\"."
                                                },
                                                "domain": {
                                                  "description": "Optional domain of the solution, written as an inequality, e.g. 'x\\geq 0', '0<x<2\\pi', etc.",
                                                  "type": "string"
                                                },
                                                "restrictVariable": {
                                                  "description": "The variable to solve for. If not given, all variables in the system will be solved for.",
                                                  "type": "string"
                                                },
                                                "method": {
                                                  "description": "The method to use for solving the system. If not given, the system will prefer the elimination method.",
                                                  "type": "string",
                                                  "enum": [
                                                    "Eliminate",
                                                    "Substitute",
                                                    "Equate"
                                                  ]
                                                }
                                              },
                                              "required": [
                                                "type",
                                                "variables",
                                                "expression"
                                              ],
                                              "additionalProperties": false
                                            },
                                            {
                                              "type": "object",
                                              "properties": {
                                                "type": {
                                                  "type": "string",
                                                  "const": "EXPAND",
                                                  "description": "Indicates the task is to expand the given mathematical expression, such as multiplying out brackets and applying exponentiation."
                                                },
                                                "expression": {
                                                  "type": "string",
                                                  "description": "The LaTeX string representing the mathematical expression to expand."
                                                }
                                              },
                                              "required": [
                                                "type",
                                                "expression"
                                              ],
                                              "additionalProperties": false
                                            },
                                            {
                                              "type": "object",
                                              "properties": {
                                                "type": {
                                                  "type": "string",
                                                  "const": "FACTOR",
                                                  "description": "Indicates the task is to factor the given mathematical expression, such as taking out common factors and factorising quadratics."
                                                },
                                                "expression": {
                                                  "type": "string",
                                                  "description": "The LaTeX string representing the mathematical expression to factor."
                                                }
                                              },
                                              "required": [
                                                "type",
                                                "expression"
                                              ],
                                              "additionalProperties": false
                                            },
                                            {
                                              "type": "object",
                                              "properties": {
                                                "type": {
                                                  "type": "string",
                                                  "const": "TOGETHER",
                                                  "description": "Indicates the task is to combine a sum of fractions into a single fraction."
                                                },
                                                "expression": {
                                                  "type": "string",
                                                  "description": "The LaTeX string representing the sum of fractions to combine into a single fraction."
                                                }
                                              },
                                              "required": [
                                                "type",
                                                "expression"
                                              ],
                                              "additionalProperties": false
                                            },
                                            {
                                              "type": "object",
                                              "properties": {
                                                "type": {
                                                  "type": "string",
                                                  "const": "COMPLETE_SQUARE",
                                                  "description": "Indicates the task is to complete the square for a quadratic expression with respect to a specific variable."
                                                },
                                                "variable": {
                                                  "type": "string",
                                                  "description": "The variable to complete the square for, e.g. 'x'"
                                                },
                                                "expression": {
                                                  "type": "string",
                                                  "description": "The LaTeX string representing the quadratic expression to complete the square for."
                                                }
                                              },
                                              "required": [
                                                "type",
                                                "variable",
                                                "expression"
                                              ],
                                              "additionalProperties": false
                                            },
                                            {
                                              "type": "object",
                                              "properties": {
                                                "type": {
                                                  "type": "string",
                                                  "const": "POLYNOMIAL_STANDARD_FORM",
                                                  "description": "Indicates the task is to convert a polynomial expression to its standard form. This involves expanding the expression and then rearranging it in descending powers of the specified variable."
                                                },
                                                "expression": {
                                                  "type": "string",
                                                  "description": "The LaTeX string representing the polynomial expression to convert to standard form."
                                                },
                                                "variable": {
                                                  "type": "string",
                                                  "description": "The variable to convert to standard form, e.g. 'x'"
                                                }
                                              },
                                              "required": [
                                                "type",
                                                "expression",
                                                "variable"
                                              ],
                                              "additionalProperties": false
                                            },
                                            {
                                              "type": "object",
                                              "properties": {
                                                "type": {
                                                  "type": "string",
                                                  "const": "POWER_STANDARD_FORM",
                                                  "description": "Indicates the task is to convert a power expression to its standard form. This involves rewriting radicals and fractions into exponent form."
                                                },
                                                "expression": {
                                                  "type": "string",
                                                  "description": "The LaTeX string representing the power expression to convert to standard form."
                                                },
                                                "variable": {
                                                  "type": "string",
                                                  "description": "The variable to convert to standard form, e.g. 'x'"
                                                }
                                              },
                                              "required": [
                                                "type",
                                                "expression",
                                                "variable"
                                              ],
                                              "additionalProperties": false
                                            },
                                            {
                                              "type": "object",
                                              "properties": {
                                                "type": {
                                                  "type": "string",
                                                  "const": "EXPONENTIAL_STANDARD_FORM",
                                                  "description": "Indicates the task is to convert an exponential expression to its standard form $b\\cdot g^x$."
                                                },
                                                "variable": {
                                                  "type": "string",
                                                  "description": "The variable to convert to standard form, e.g. 'x'"
                                                },
                                                "expression": {
                                                  "type": "string",
                                                  "description": "The LaTeX string representing the exponential expression to convert to standard form."
                                                }
                                              },
                                              "required": [
                                                "type",
                                                "variable",
                                                "expression"
                                              ],
                                              "additionalProperties": false
                                            },
                                            {
                                              "type": "object",
                                              "properties": {
                                                "type": {
                                                  "type": "string",
                                                  "const": "CARTESIAN_TO_POLAR_FORM",
                                                  "description": "Indicates the task is to convert Cartesian coordinates to polar coordinates."
                                                },
                                                "expression": {
                                                  "type": "string",
                                                  "description": "The LaTeX string representing the Cartesian coordinates to convert to polar coordinates."
                                                }
                                              },
                                              "required": [
                                                "type",
                                                "expression"
                                              ],
                                              "additionalProperties": false
                                            },
                                            {
                                              "type": "object",
                                              "properties": {
                                                "type": {
                                                  "type": "string",
                                                  "const": "POLAR_TO_CARTESIAN_FORM",
                                                  "description": "Indicates the task is to convert polar coordinates to Cartesian coordinates."
                                                },
                                                "expression": {
                                                  "type": "string",
                                                  "description": "The LaTeX string representing the polar coordinates to convert to Cartesian coordinates."
                                                }
                                              },
                                              "required": [
                                                "type",
                                                "expression"
                                              ],
                                              "additionalProperties": false
                                            }
                                          ],
                                          "description": "The task that the student needs to perform for this expression part. This defines what the student is expected to do with the given expression, such as simplifying it, factoring it, or converting it to a different form."
                                        },
                                        "unit": {
                                          "description": "An optional unit associated with the expression",
                                          "type": "object",
                                          "properties": {
                                            "unit": {
                                              "type": "string",
                                              "description": "The specific unit that the student's answer should be in. This can be a standard unit like \"\\frac{m}{s}\" or \"kg\", or a more complex unit expression."
                                            },
                                            "allowEquivalentUnits": {
                                              "description": "Whether to allow equivalent units (e.g., \"\\frac{m}{s}\" and \"\\frac{km}{h}\" could be considered equivalent if allowEquivalentUnits is true). If false or not provided, only the specified unit will be accepted.",
                                              "type": "boolean"
                                            },
                                            "override": {
                                              "description": "Whether to override the unit inferred from the task. If true, the specified unit will be used for evaluation regardless of any units mentioned in the task.",
                                              "type": "boolean"
                                            }
                                          },
                                          "required": [
                                            "unit"
                                          ],
                                          "additionalProperties": false
                                        },
                                        "accuracy": {
                                          "description": "An optional accuracy specification that defines how to evaluate the student's answer for this expression part. If not provided, a default evaluation method will be used.",
                                          "type": "object",
                                          "properties": {
                                            "type": {
                                              "type": "string",
                                              "enum": [
                                                "ROUND",
                                                "ROUND_UP",
                                                "ROUND_DOWN",
                                                "ACCURATE",
                                                "PRECISION"
                                              ],
                                              "description": "The type of accuracy to be applied. 'ROUND' means standard rounding to a specified number of decimal places. 'ROUND_UP' means rounding up (ceiling) to a specified number of decimal places. 'ROUND_DOWN' means rounding down (floor) to a specified number of decimal places. 'ACCURATE' means that the answer must be accurate with AT LEAST the specified number of decimal places. 'PRECISION' means that the student's answer must have a specified number of significant digits, regardless of the number of decimal places."
                                            },
                                            "nr": {
                                              "type": "number",
                                              "description": "The numerical value associated with the accuracy"
                                            },
                                            "keepDecimalZeros": {
                                              "description": "Whether to keep trailing zeros in decimal answers. Applies when type is 'ROUND', 'ACCURATE', 'ROUND_UP', or 'ROUND_DOWN'. If true, answers will be formatted to have exactly 'nr' decimal places, even if that means adding trailing zeros. If false or not provided, trailing zeros will be omitted.",
                                              "type": "boolean"
                                            }
                                          },
                                          "required": [
                                            "type",
                                            "nr"
                                          ],
                                          "additionalProperties": false
                                        },
                                        "form": {
                                          "description": "An optional specification of the expected form of the student's answer for this expression part.",
                                          "type": "object",
                                          "properties": {
                                            "numbers": {
                                              "type": "string",
                                              "enum": [
                                                "DECIMAL_REQUIRED",
                                                "DECIMAL_PREFERRED",
                                                "FRACTION_REQUIRED",
                                                "FRACTION_PREFERRED",
                                                "SCIENTIFIC_NOTATION_REQUIRED",
                                                "SCIENTIFIC_NOTATION_PREFERRED"
                                              ]
                                            },
                                            "radicals": {
                                              "type": "string",
                                              "enum": [
                                                "STANDARD_FORM_REQUIRED"
                                              ]
                                            },
                                            "fractions": {
                                              "type": "string",
                                              "enum": [
                                                "MIXED_FRACTION_REQUIRED",
                                                "IMPROPER_FRACTION_REQUIRED"
                                              ]
                                            }
                                          },
                                          "additionalProperties": false
                                        },
                                        "symbol": {
                                          "description": "An optional variable or function that represents this part. E.g. \"E\" if this part represents energy, or \"f(x)\" if it represents a function definition.",
                                          "type": "string"
                                        },
                                        "description": {
                                          "description": "An description of what this part represents. E.g \"the total discount\"",
                                          "type": "string"
                                        },
                                        "alternativeTasks": {
                                          "description": "An optional array of alternative tasks that are also accepted as correct answers for this part.",
                                          "type": "array",
                                          "items": {
                                            "oneOf": [
                                              {
                                                "type": "object",
                                                "properties": {
                                                  "type": {
                                                    "type": "string",
                                                    "const": "SIMPLIFY",
                                                    "description": "Indicates the task is to simplify the given mathematical expression using mathematical and algebraic rules."
                                                  },
                                                  "expression": {
                                                    "type": "string",
                                                    "description": "The LaTeX string representing the mathematical expression to simplify."
                                                  }
                                                },
                                                "required": [
                                                  "type",
                                                  "expression"
                                                ],
                                                "additionalProperties": false
                                              },
                                              {
                                                "type": "object",
                                                "properties": {
                                                  "type": {
                                                    "type": "string",
                                                    "const": "SOLVE",
                                                    "description": "Indicates the task is to solve the given equation or inequality for a specific variable."
                                                  },
                                                  "expression": {
                                                    "type": "string",
                                                    "description": "The LaTeX string representing the equation or inequality to solve. For example, \"x^2-4=0\" or \"2x+3>5\"."
                                                  },
                                                  "variable": {
                                                    "type": "string",
                                                    "description": "The variable to solve for, e.g. 'x'"
                                                  },
                                                  "domain": {
                                                    "description": "Optional domain of the solution, written as an inequality, e.g. 'x\\geq 0', '0<x<2\\pi', etc.",
                                                    "type": "string"
                                                  }
                                                },
                                                "required": [
                                                  "type",
                                                  "expression",
                                                  "variable"
                                                ],
                                                "additionalProperties": false
                                              },
                                              {
                                                "type": "object",
                                                "properties": {
                                                  "type": {
                                                    "type": "string",
                                                    "const": "SOLVE_SYSTEM",
                                                    "description": "Indicates the task is to solve a system of equations or inequalities for specific variables."
                                                  },
                                                  "variables": {
                                                    "type": "array",
                                                    "items": {
                                                      "type": "string"
                                                    },
                                                    "description": "The variables to solve for, e.g. ['x', 'y']"
                                                  },
                                                  "expression": {
                                                    "type": "string",
                                                    "description": "The LaTeX string representing the system of equations or inequalities in LaTeX. Write the system as a LaTeX set. For example: \"{x+y=1, x-y=2}\"."
                                                  },
                                                  "domain": {
                                                    "description": "Optional domain of the solution, written as an inequality, e.g. 'x\\geq 0', '0<x<2\\pi', etc.",
                                                    "type": "string"
                                                  },
                                                  "restrictVariable": {
                                                    "description": "The variable to solve for. If not given, all variables in the system will be solved for.",
                                                    "type": "string"
                                                  },
                                                  "method": {
                                                    "description": "The method to use for solving the system. If not given, the system will prefer the elimination method.",
                                                    "type": "string",
                                                    "enum": [
                                                      "Eliminate",
                                                      "Substitute",
                                                      "Equate"
                                                    ]
                                                  }
                                                },
                                                "required": [
                                                  "type",
                                                  "variables",
                                                  "expression"
                                                ],
                                                "additionalProperties": false
                                              },
                                              {
                                                "type": "object",
                                                "properties": {
                                                  "type": {
                                                    "type": "string",
                                                    "const": "EXPAND",
                                                    "description": "Indicates the task is to expand the given mathematical expression, such as multiplying out brackets and applying exponentiation."
                                                  },
                                                  "expression": {
                                                    "type": "string",
                                                    "description": "The LaTeX string representing the mathematical expression to expand."
                                                  }
                                                },
                                                "required": [
                                                  "type",
                                                  "expression"
                                                ],
                                                "additionalProperties": false
                                              },
                                              {
                                                "type": "object",
                                                "properties": {
                                                  "type": {
                                                    "type": "string",
                                                    "const": "FACTOR",
                                                    "description": "Indicates the task is to factor the given mathematical expression, such as taking out common factors and factorising quadratics."
                                                  },
                                                  "expression": {
                                                    "type": "string",
                                                    "description": "The LaTeX string representing the mathematical expression to factor."
                                                  }
                                                },
                                                "required": [
                                                  "type",
                                                  "expression"
                                                ],
                                                "additionalProperties": false
                                              },
                                              {
                                                "type": "object",
                                                "properties": {
                                                  "type": {
                                                    "type": "string",
                                                    "const": "TOGETHER",
                                                    "description": "Indicates the task is to combine a sum of fractions into a single fraction."
                                                  },
                                                  "expression": {
                                                    "type": "string",
                                                    "description": "The LaTeX string representing the sum of fractions to combine into a single fraction."
                                                  }
                                                },
                                                "required": [
                                                  "type",
                                                  "expression"
                                                ],
                                                "additionalProperties": false
                                              },
                                              {
                                                "type": "object",
                                                "properties": {
                                                  "type": {
                                                    "type": "string",
                                                    "const": "COMPLETE_SQUARE",
                                                    "description": "Indicates the task is to complete the square for a quadratic expression with respect to a specific variable."
                                                  },
                                                  "variable": {
                                                    "type": "string",
                                                    "description": "The variable to complete the square for, e.g. 'x'"
                                                  },
                                                  "expression": {
                                                    "type": "string",
                                                    "description": "The LaTeX string representing the quadratic expression to complete the square for."
                                                  }
                                                },
                                                "required": [
                                                  "type",
                                                  "variable",
                                                  "expression"
                                                ],
                                                "additionalProperties": false
                                              },
                                              {
                                                "type": "object",
                                                "properties": {
                                                  "type": {
                                                    "type": "string",
                                                    "const": "POLYNOMIAL_STANDARD_FORM",
                                                    "description": "Indicates the task is to convert a polynomial expression to its standard form. This involves expanding the expression and then rearranging it in descending powers of the specified variable."
                                                  },
                                                  "expression": {
                                                    "type": "string",
                                                    "description": "The LaTeX string representing the polynomial expression to convert to standard form."
                                                  },
                                                  "variable": {
                                                    "type": "string",
                                                    "description": "The variable to convert to standard form, e.g. 'x'"
                                                  }
                                                },
                                                "required": [
                                                  "type",
                                                  "expression",
                                                  "variable"
                                                ],
                                                "additionalProperties": false
                                              },
                                              {
                                                "type": "object",
                                                "properties": {
                                                  "type": {
                                                    "type": "string",
                                                    "const": "POWER_STANDARD_FORM",
                                                    "description": "Indicates the task is to convert a power expression to its standard form. This involves rewriting radicals and fractions into exponent form."
                                                  },
                                                  "expression": {
                                                    "type": "string",
                                                    "description": "The LaTeX string representing the power expression to convert to standard form."
                                                  },
                                                  "variable": {
                                                    "type": "string",
                                                    "description": "The variable to convert to standard form, e.g. 'x'"
                                                  }
                                                },
                                                "required": [
                                                  "type",
                                                  "expression",
                                                  "variable"
                                                ],
                                                "additionalProperties": false
                                              },
                                              {
                                                "type": "object",
                                                "properties": {
                                                  "type": {
                                                    "type": "string",
                                                    "const": "EXPONENTIAL_STANDARD_FORM",
                                                    "description": "Indicates the task is to convert an exponential expression to its standard form $b\\cdot g^x$."
                                                  },
                                                  "variable": {
                                                    "type": "string",
                                                    "description": "The variable to convert to standard form, e.g. 'x'"
                                                  },
                                                  "expression": {
                                                    "type": "string",
                                                    "description": "The LaTeX string representing the exponential expression to convert to standard form."
                                                  }
                                                },
                                                "required": [
                                                  "type",
                                                  "variable",
                                                  "expression"
                                                ],
                                                "additionalProperties": false
                                              },
                                              {
                                                "type": "object",
                                                "properties": {
                                                  "type": {
                                                    "type": "string",
                                                    "const": "CARTESIAN_TO_POLAR_FORM",
                                                    "description": "Indicates the task is to convert Cartesian coordinates to polar coordinates."
                                                  },
                                                  "expression": {
                                                    "type": "string",
                                                    "description": "The LaTeX string representing the Cartesian coordinates to convert to polar coordinates."
                                                  }
                                                },
                                                "required": [
                                                  "type",
                                                  "expression"
                                                ],
                                                "additionalProperties": false
                                              },
                                              {
                                                "type": "object",
                                                "properties": {
                                                  "type": {
                                                    "type": "string",
                                                    "const": "POLAR_TO_CARTESIAN_FORM",
                                                    "description": "Indicates the task is to convert polar coordinates to Cartesian coordinates."
                                                  },
                                                  "expression": {
                                                    "type": "string",
                                                    "description": "The LaTeX string representing the polar coordinates to convert to Cartesian coordinates."
                                                  }
                                                },
                                                "required": [
                                                  "type",
                                                  "expression"
                                                ],
                                                "additionalProperties": false
                                              }
                                            ],
                                            "description": "A task that defines what the student is expected to do."
                                          }
                                        }
                                      },
                                      "required": [
                                        "task"
                                      ],
                                      "additionalProperties": false
                                    }
                                  },
                                  "solutionPart": {
                                    "type": "object",
                                    "properties": {
                                      "task": {
                                        "oneOf": [
                                          {
                                            "type": "object",
                                            "properties": {
                                              "type": {
                                                "type": "string",
                                                "const": "SIMPLIFY",
                                                "description": "Indicates the task is to simplify the given mathematical expression using mathematical and algebraic rules."
                                              },
                                              "expression": {
                                                "type": "string",
                                                "description": "The LaTeX string representing the mathematical expression to simplify."
                                              }
                                            },
                                            "required": [
                                              "type",
                                              "expression"
                                            ],
                                            "additionalProperties": false
                                          },
                                          {
                                            "type": "object",
                                            "properties": {
                                              "type": {
                                                "type": "string",
                                                "const": "SOLVE",
                                                "description": "Indicates the task is to solve the given equation or inequality for a specific variable."
                                              },
                                              "expression": {
                                                "type": "string",
                                                "description": "The LaTeX string representing the equation or inequality to solve. For example, \"x^2-4=0\" or \"2x+3>5\"."
                                              },
                                              "variable": {
                                                "type": "string",
                                                "description": "The variable to solve for, e.g. 'x'"
                                              },
                                              "domain": {
                                                "description": "Optional domain of the solution, written as an inequality, e.g. 'x\\geq 0', '0<x<2\\pi', etc.",
                                                "type": "string"
                                              }
                                            },
                                            "required": [
                                              "type",
                                              "expression",
                                              "variable"
                                            ],
                                            "additionalProperties": false
                                          },
                                          {
                                            "type": "object",
                                            "properties": {
                                              "type": {
                                                "type": "string",
                                                "const": "SOLVE_SYSTEM",
                                                "description": "Indicates the task is to solve a system of equations or inequalities for specific variables."
                                              },
                                              "variables": {
                                                "type": "array",
                                                "items": {
                                                  "type": "string"
                                                },
                                                "description": "The variables to solve for, e.g. ['x', 'y']"
                                              },
                                              "expression": {
                                                "type": "string",
                                                "description": "The LaTeX string representing the system of equations or inequalities in LaTeX. Write the system as a LaTeX set. For example: \"{x+y=1, x-y=2}\"."
                                              },
                                              "domain": {
                                                "description": "Optional domain of the solution, written as an inequality, e.g. 'x\\geq 0', '0<x<2\\pi', etc.",
                                                "type": "string"
                                              },
                                              "restrictVariable": {
                                                "description": "The variable to solve for. If not given, all variables in the system will be solved for.",
                                                "type": "string"
                                              },
                                              "method": {
                                                "description": "The method to use for solving the system. If not given, the system will prefer the elimination method.",
                                                "type": "string",
                                                "enum": [
                                                  "Eliminate",
                                                  "Substitute",
                                                  "Equate"
                                                ]
                                              }
                                            },
                                            "required": [
                                              "type",
                                              "variables",
                                              "expression"
                                            ],
                                            "additionalProperties": false
                                          },
                                          {
                                            "type": "object",
                                            "properties": {
                                              "type": {
                                                "type": "string",
                                                "const": "EXPAND",
                                                "description": "Indicates the task is to expand the given mathematical expression, such as multiplying out brackets and applying exponentiation."
                                              },
                                              "expression": {
                                                "type": "string",
                                                "description": "The LaTeX string representing the mathematical expression to expand."
                                              }
                                            },
                                            "required": [
                                              "type",
                                              "expression"
                                            ],
                                            "additionalProperties": false
                                          },
                                          {
                                            "type": "object",
                                            "properties": {
                                              "type": {
                                                "type": "string",
                                                "const": "FACTOR",
                                                "description": "Indicates the task is to factor the given mathematical expression, such as taking out common factors and factorising quadratics."
                                              },
                                              "expression": {
                                                "type": "string",
                                                "description": "The LaTeX string representing the mathematical expression to factor."
                                              }
                                            },
                                            "required": [
                                              "type",
                                              "expression"
                                            ],
                                            "additionalProperties": false
                                          },
                                          {
                                            "type": "object",
                                            "properties": {
                                              "type": {
                                                "type": "string",
                                                "const": "TOGETHER",
                                                "description": "Indicates the task is to combine a sum of fractions into a single fraction."
                                              },
                                              "expression": {
                                                "type": "string",
                                                "description": "The LaTeX string representing the sum of fractions to combine into a single fraction."
                                              }
                                            },
                                            "required": [
                                              "type",
                                              "expression"
                                            ],
                                            "additionalProperties": false
                                          },
                                          {
                                            "type": "object",
                                            "properties": {
                                              "type": {
                                                "type": "string",
                                                "const": "COMPLETE_SQUARE",
                                                "description": "Indicates the task is to complete the square for a quadratic expression with respect to a specific variable."
                                              },
                                              "variable": {
                                                "type": "string",
                                                "description": "The variable to complete the square for, e.g. 'x'"
                                              },
                                              "expression": {
                                                "type": "string",
                                                "description": "The LaTeX string representing the quadratic expression to complete the square for."
                                              }
                                            },
                                            "required": [
                                              "type",
                                              "variable",
                                              "expression"
                                            ],
                                            "additionalProperties": false
                                          },
                                          {
                                            "type": "object",
                                            "properties": {
                                              "type": {
                                                "type": "string",
                                                "const": "POLYNOMIAL_STANDARD_FORM",
                                                "description": "Indicates the task is to convert a polynomial expression to its standard form. This involves expanding the expression and then rearranging it in descending powers of the specified variable."
                                              },
                                              "expression": {
                                                "type": "string",
                                                "description": "The LaTeX string representing the polynomial expression to convert to standard form."
                                              },
                                              "variable": {
                                                "type": "string",
                                                "description": "The variable to convert to standard form, e.g. 'x'"
                                              }
                                            },
                                            "required": [
                                              "type",
                                              "expression",
                                              "variable"
                                            ],
                                            "additionalProperties": false
                                          },
                                          {
                                            "type": "object",
                                            "properties": {
                                              "type": {
                                                "type": "string",
                                                "const": "POWER_STANDARD_FORM",
                                                "description": "Indicates the task is to convert a power expression to its standard form. This involves rewriting radicals and fractions into exponent form."
                                              },
                                              "expression": {
                                                "type": "string",
                                                "description": "The LaTeX string representing the power expression to convert to standard form."
                                              },
                                              "variable": {
                                                "type": "string",
                                                "description": "The variable to convert to standard form, e.g. 'x'"
                                              }
                                            },
                                            "required": [
                                              "type",
                                              "expression",
                                              "variable"
                                            ],
                                            "additionalProperties": false
                                          },
                                          {
                                            "type": "object",
                                            "properties": {
                                              "type": {
                                                "type": "string",
                                                "const": "EXPONENTIAL_STANDARD_FORM",
                                                "description": "Indicates the task is to convert an exponential expression to its standard form $b\\cdot g^x$."
                                              },
                                              "variable": {
                                                "type": "string",
                                                "description": "The variable to convert to standard form, e.g. 'x'"
                                              },
                                              "expression": {
                                                "type": "string",
                                                "description": "The LaTeX string representing the exponential expression to convert to standard form."
                                              }
                                            },
                                            "required": [
                                              "type",
                                              "variable",
                                              "expression"
                                            ],
                                            "additionalProperties": false
                                          },
                                          {
                                            "type": "object",
                                            "properties": {
                                              "type": {
                                                "type": "string",
                                                "const": "CARTESIAN_TO_POLAR_FORM",
                                                "description": "Indicates the task is to convert Cartesian coordinates to polar coordinates."
                                              },
                                              "expression": {
                                                "type": "string",
                                                "description": "The LaTeX string representing the Cartesian coordinates to convert to polar coordinates."
                                              }
                                            },
                                            "required": [
                                              "type",
                                              "expression"
                                            ],
                                            "additionalProperties": false
                                          },
                                          {
                                            "type": "object",
                                            "properties": {
                                              "type": {
                                                "type": "string",
                                                "const": "POLAR_TO_CARTESIAN_FORM",
                                                "description": "Indicates the task is to convert polar coordinates to Cartesian coordinates."
                                              },
                                              "expression": {
                                                "type": "string",
                                                "description": "The LaTeX string representing the polar coordinates to convert to Cartesian coordinates."
                                              }
                                            },
                                            "required": [
                                              "type",
                                              "expression"
                                            ],
                                            "additionalProperties": false
                                          }
                                        ],
                                        "description": "The task that the student needs to perform for this expression part. This defines what the student is expected to do with the given expression, such as simplifying it, factoring it, or converting it to a different form."
                                      },
                                      "unit": {
                                        "description": "An optional unit associated with the expression",
                                        "type": "object",
                                        "properties": {
                                          "unit": {
                                            "type": "string",
                                            "description": "The specific unit that the student's answer should be in. This can be a standard unit like \"\\frac{m}{s}\" or \"kg\", or a more complex unit expression."
                                          },
                                          "allowEquivalentUnits": {
                                            "description": "Whether to allow equivalent units (e.g., \"\\frac{m}{s}\" and \"\\frac{km}{h}\" could be considered equivalent if allowEquivalentUnits is true). If false or not provided, only the specified unit will be accepted.",
                                            "type": "boolean"
                                          },
                                          "override": {
                                            "description": "Whether to override the unit inferred from the task. If true, the specified unit will be used for evaluation regardless of any units mentioned in the task.",
                                            "type": "boolean"
                                          }
                                        },
                                        "required": [
                                          "unit"
                                        ],
                                        "additionalProperties": false
                                      },
                                      "accuracy": {
                                        "description": "An optional accuracy specification that defines how to evaluate the student's answer for this expression part. If not provided, a default evaluation method will be used.",
                                        "type": "object",
                                        "properties": {
                                          "type": {
                                            "type": "string",
                                            "enum": [
                                              "ROUND",
                                              "ROUND_UP",
                                              "ROUND_DOWN",
                                              "ACCURATE",
                                              "PRECISION"
                                            ],
                                            "description": "The type of accuracy to be applied. 'ROUND' means standard rounding to a specified number of decimal places. 'ROUND_UP' means rounding up (ceiling) to a specified number of decimal places. 'ROUND_DOWN' means rounding down (floor) to a specified number of decimal places. 'ACCURATE' means that the answer must be accurate with AT LEAST the specified number of decimal places. 'PRECISION' means that the student's answer must have a specified number of significant digits, regardless of the number of decimal places."
                                          },
                                          "nr": {
                                            "type": "number",
                                            "description": "The numerical value associated with the accuracy"
                                          },
                                          "keepDecimalZeros": {
                                            "description": "Whether to keep trailing zeros in decimal answers. Applies when type is 'ROUND', 'ACCURATE', 'ROUND_UP', or 'ROUND_DOWN'. If true, answers will be formatted to have exactly 'nr' decimal places, even if that means adding trailing zeros. If false or not provided, trailing zeros will be omitted.",
                                            "type": "boolean"
                                          }
                                        },
                                        "required": [
                                          "type",
                                          "nr"
                                        ],
                                        "additionalProperties": false
                                      },
                                      "form": {
                                        "description": "An optional specification of the expected form of the student's answer for this expression part.",
                                        "type": "object",
                                        "properties": {
                                          "numbers": {
                                            "type": "string",
                                            "enum": [
                                              "DECIMAL_REQUIRED",
                                              "DECIMAL_PREFERRED",
                                              "FRACTION_REQUIRED",
                                              "FRACTION_PREFERRED",
                                              "SCIENTIFIC_NOTATION_REQUIRED",
                                              "SCIENTIFIC_NOTATION_PREFERRED"
                                            ]
                                          },
                                          "radicals": {
                                            "type": "string",
                                            "enum": [
                                              "STANDARD_FORM_REQUIRED"
                                            ]
                                          },
                                          "fractions": {
                                            "type": "string",
                                            "enum": [
                                              "MIXED_FRACTION_REQUIRED",
                                              "IMPROPER_FRACTION_REQUIRED"
                                            ]
                                          }
                                        },
                                        "additionalProperties": false
                                      },
                                      "symbol": {
                                        "description": "An optional variable or function that represents this part. E.g. \"E\" if this part represents energy, or \"f(x)\" if it represents a function definition.",
                                        "type": "string"
                                      },
                                      "description": {
                                        "description": "An description of what this part represents. E.g \"the total discount\"",
                                        "type": "string"
                                      },
                                      "alternativeTasks": {
                                        "description": "An optional array of alternative tasks that are also accepted as correct answers for this part.",
                                        "type": "array",
                                        "items": {
                                          "oneOf": [
                                            {
                                              "type": "object",
                                              "properties": {
                                                "type": {
                                                  "type": "string",
                                                  "const": "SIMPLIFY",
                                                  "description": "Indicates the task is to simplify the given mathematical expression using mathematical and algebraic rules."
                                                },
                                                "expression": {
                                                  "type": "string",
                                                  "description": "The LaTeX string representing the mathematical expression to simplify."
                                                }
                                              },
                                              "required": [
                                                "type",
                                                "expression"
                                              ],
                                              "additionalProperties": false
                                            },
                                            {
                                              "type": "object",
                                              "properties": {
                                                "type": {
                                                  "type": "string",
                                                  "const": "SOLVE",
                                                  "description": "Indicates the task is to solve the given equation or inequality for a specific variable."
                                                },
                                                "expression": {
                                                  "type": "string",
                                                  "description": "The LaTeX string representing the equation or inequality to solve. For example, \"x^2-4=0\" or \"2x+3>5\"."
                                                },
                                                "variable": {
                                                  "type": "string",
                                                  "description": "The variable to solve for, e.g. 'x'"
                                                },
                                                "domain": {
                                                  "description": "Optional domain of the solution, written as an inequality, e.g. 'x\\geq 0', '0<x<2\\pi', etc.",
                                                  "type": "string"
                                                }
                                              },
                                              "required": [
                                                "type",
                                                "expression",
                                                "variable"
                                              ],
                                              "additionalProperties": false
                                            },
                                            {
                                              "type": "object",
                                              "properties": {
                                                "type": {
                                                  "type": "string",
                                                  "const": "SOLVE_SYSTEM",
                                                  "description": "Indicates the task is to solve a system of equations or inequalities for specific variables."
                                                },
                                                "variables": {
                                                  "type": "array",
                                                  "items": {
                                                    "type": "string"
                                                  },
                                                  "description": "The variables to solve for, e.g. ['x', 'y']"
                                                },
                                                "expression": {
                                                  "type": "string",
                                                  "description": "The LaTeX string representing the system of equations or inequalities in LaTeX. Write the system as a LaTeX set. For example: \"{x+y=1, x-y=2}\"."
                                                },
                                                "domain": {
                                                  "description": "Optional domain of the solution, written as an inequality, e.g. 'x\\geq 0', '0<x<2\\pi', etc.",
                                                  "type": "string"
                                                },
                                                "restrictVariable": {
                                                  "description": "The variable to solve for. If not given, all variables in the system will be solved for.",
                                                  "type": "string"
                                                },
                                                "method": {
                                                  "description": "The method to use for solving the system. If not given, the system will prefer the elimination method.",
                                                  "type": "string",
                                                  "enum": [
                                                    "Eliminate",
                                                    "Substitute",
                                                    "Equate"
                                                  ]
                                                }
                                              },
                                              "required": [
                                                "type",
                                                "variables",
                                                "expression"
                                              ],
                                              "additionalProperties": false
                                            },
                                            {
                                              "type": "object",
                                              "properties": {
                                                "type": {
                                                  "type": "string",
                                                  "const": "EXPAND",
                                                  "description": "Indicates the task is to expand the given mathematical expression, such as multiplying out brackets and applying exponentiation."
                                                },
                                                "expression": {
                                                  "type": "string",
                                                  "description": "The LaTeX string representing the mathematical expression to expand."
                                                }
                                              },
                                              "required": [
                                                "type",
                                                "expression"
                                              ],
                                              "additionalProperties": false
                                            },
                                            {
                                              "type": "object",
                                              "properties": {
                                                "type": {
                                                  "type": "string",
                                                  "const": "FACTOR",
                                                  "description": "Indicates the task is to factor the given mathematical expression, such as taking out common factors and factorising quadratics."
                                                },
                                                "expression": {
                                                  "type": "string",
                                                  "description": "The LaTeX string representing the mathematical expression to factor."
                                                }
                                              },
                                              "required": [
                                                "type",
                                                "expression"
                                              ],
                                              "additionalProperties": false
                                            },
                                            {
                                              "type": "object",
                                              "properties": {
                                                "type": {
                                                  "type": "string",
                                                  "const": "TOGETHER",
                                                  "description": "Indicates the task is to combine a sum of fractions into a single fraction."
                                                },
                                                "expression": {
                                                  "type": "string",
                                                  "description": "The LaTeX string representing the sum of fractions to combine into a single fraction."
                                                }
                                              },
                                              "required": [
                                                "type",
                                                "expression"
                                              ],
                                              "additionalProperties": false
                                            },
                                            {
                                              "type": "object",
                                              "properties": {
                                                "type": {
                                                  "type": "string",
                                                  "const": "COMPLETE_SQUARE",
                                                  "description": "Indicates the task is to complete the square for a quadratic expression with respect to a specific variable."
                                                },
                                                "variable": {
                                                  "type": "string",
                                                  "description": "The variable to complete the square for, e.g. 'x'"
                                                },
                                                "expression": {
                                                  "type": "string",
                                                  "description": "The LaTeX string representing the quadratic expression to complete the square for."
                                                }
                                              },
                                              "required": [
                                                "type",
                                                "variable",
                                                "expression"
                                              ],
                                              "additionalProperties": false
                                            },
                                            {
                                              "type": "object",
                                              "properties": {
                                                "type": {
                                                  "type": "string",
                                                  "const": "POLYNOMIAL_STANDARD_FORM",
                                                  "description": "Indicates the task is to convert a polynomial expression to its standard form. This involves expanding the expression and then rearranging it in descending powers of the specified variable."
                                                },
                                                "expression": {
                                                  "type": "string",
                                                  "description": "The LaTeX string representing the polynomial expression to convert to standard form."
                                                },
                                                "variable": {
                                                  "type": "string",
                                                  "description": "The variable to convert to standard form, e.g. 'x'"
                                                }
                                              },
                                              "required": [
                                                "type",
                                                "expression",
                                                "variable"
                                              ],
                                              "additionalProperties": false
                                            },
                                            {
                                              "type": "object",
                                              "properties": {
                                                "type": {
                                                  "type": "string",
                                                  "const": "POWER_STANDARD_FORM",
                                                  "description": "Indicates the task is to convert a power expression to its standard form. This involves rewriting radicals and fractions into exponent form."
                                                },
                                                "expression": {
                                                  "type": "string",
                                                  "description": "The LaTeX string representing the power expression to convert to standard form."
                                                },
                                                "variable": {
                                                  "type": "string",
                                                  "description": "The variable to convert to standard form, e.g. 'x'"
                                                }
                                              },
                                              "required": [
                                                "type",
                                                "expression",
                                                "variable"
                                              ],
                                              "additionalProperties": false
                                            },
                                            {
                                              "type": "object",
                                              "properties": {
                                                "type": {
                                                  "type": "string",
                                                  "const": "EXPONENTIAL_STANDARD_FORM",
                                                  "description": "Indicates the task is to convert an exponential expression to its standard form $b\\cdot g^x$."
                                                },
                                                "variable": {
                                                  "type": "string",
                                                  "description": "The variable to convert to standard form, e.g. 'x'"
                                                },
                                                "expression": {
                                                  "type": "string",
                                                  "description": "The LaTeX string representing the exponential expression to convert to standard form."
                                                }
                                              },
                                              "required": [
                                                "type",
                                                "variable",
                                                "expression"
                                              ],
                                              "additionalProperties": false
                                            },
                                            {
                                              "type": "object",
                                              "properties": {
                                                "type": {
                                                  "type": "string",
                                                  "const": "CARTESIAN_TO_POLAR_FORM",
                                                  "description": "Indicates the task is to convert Cartesian coordinates to polar coordinates."
                                                },
                                                "expression": {
                                                  "type": "string",
                                                  "description": "The LaTeX string representing the Cartesian coordinates to convert to polar coordinates."
                                                }
                                              },
                                              "required": [
                                                "type",
                                                "expression"
                                              ],
                                              "additionalProperties": false
                                            },
                                            {
                                              "type": "object",
                                              "properties": {
                                                "type": {
                                                  "type": "string",
                                                  "const": "POLAR_TO_CARTESIAN_FORM",
                                                  "description": "Indicates the task is to convert polar coordinates to Cartesian coordinates."
                                                },
                                                "expression": {
                                                  "type": "string",
                                                  "description": "The LaTeX string representing the polar coordinates to convert to Cartesian coordinates."
                                                }
                                              },
                                              "required": [
                                                "type",
                                                "expression"
                                              ],
                                              "additionalProperties": false
                                            }
                                          ],
                                          "description": "A task that defines what the student is expected to do."
                                        }
                                      }
                                    },
                                    "required": [
                                      "task"
                                    ],
                                    "additionalProperties": false,
                                    "description": "Mandatory calculation that must be completed to solve the problem"
                                  },
                                  "initialExpressionType": {
                                    "description": "Specifies whether an initial expression must be shown. E.g., the equation to solve. Set to 'AUTOMATIC' to use the expression from the solution task. Set to 'NONE' if you don't whant to give away this expression to the student. Set to 'CUSTOM' if you want to provide a custom expression in the 'initialExpression' field. Default setting is 'AUTOMATIC' if no intermediate parts are defined, 'NONE' otherwise.",
                                    "type": "string",
                                    "enum": [
                                      "NONE",
                                      "CUSTOM",
                                      "AUTOMATIC"
                                    ]
                                  },
                                  "initialExpression": {
                                    "description": "The initial expression (in LaTeX) for the multi-step interaction, if initialExpressionType is 'CUSTOM'.",
                                    "type": "string"
                                  }
                                },
                                "required": [
                                  "type",
                                  "solutionPart"
                                ],
                                "additionalProperties": false
                              },
                              {
                                "type": "object",
                                "properties": {
                                  "type": {
                                    "type": "string",
                                    "const": "MATH_TABLE",
                                    "description": "The question type of this interaction, which is \"MATH_TABLE\" for math table questions."
                                  },
                                  "refId": {
                                    "description": "An optional reference ID for this interaction. If not provided, a pseudo ID will be generated.",
                                    "type": "string"
                                  },
                                  "instruction": {
                                    "description": "The instruction or question prompt for this interaction",
                                    "type": "string"
                                  },
                                  "scored": {
                                    "description": "Whether this interaction should be scored or not. Defaults to true.",
                                    "type": "boolean"
                                  },
                                  "hints": {
                                    "description": "An optional list of general hints for this interaction. These are hints to get the student started and will be shown before any successful attempt is made.",
                                    "type": "array",
                                    "items": {
                                      "type": "string"
                                    }
                                  }
                                },
                                "required": [
                                  "type"
                                ],
                                "additionalProperties": false
                              }
                            ],
                            "description": "The specification of the interaction in this block. Can be one of several interaction types: Choice (multiple choice), FITB (fill in the blanks), Multistep (algebraic multi-step), or Table."
                          }
                        },
                        "required": [
                          "type",
                          "interaction"
                        ],
                        "additionalProperties": false
                      }
                    ]
                  },
                  "description": "The blocks that make up the content of this element, stacked vertically. Each block can be either a content block or an interaction block."
                }
              },
              "required": [
                "blocks"
              ],
              "additionalProperties": false
            },
            "description": "List of elements that make up the exercise. Elements with interactions will show as question blocks with labels a, b, c, etc."
          },
          "questionMode": {
            "type": "string",
            "enum": [
              "ONE_BY_ONE",
              "ALL_AT_ONCE"
            ],
            "description": "Whether to show one question at a time or all questions at once."
          },
          "script": {
            "description": "An optional script (in Algebrakit syntax) for generating randomised instances of this exercise.",
            "type": "string"
          },
          "version": {
            "type": "number",
            "description": "The version of the exercise specification. The version used in this documentation is 1"
          }
        },
        "required": [
          "type",
          "studentProfile",
          "symbols",
          "elements",
          "questionMode",
          "version"
        ],
        "additionalProperties": false,
        "description": "A complete exercise specification for the Algebrakit system. For the full specification, see https://docs.algebrakit.com/pages/315-exercise-specification/"
      },
      "CreateSessionRequest": {
        "type": "object",
        "required": [
          "exercises",
          "apiVersion"
        ],
        "properties": {
          "exercises": {
            "type": "array",
            "description": "List of exercises to create sessions for. There are three ways to specify exercises. You must specify exactly one of them:\n  - By exerciseId if the exercise was created wit the Algebrakit CMS\n  - By sessionId, to reuse the exercise from an existing session. This allows you to create identical sessions from a random exercise.\n  - By exerciseSpec, which is a JSON object describing the exercise.\n",
            "items": {
              "oneOf": [
                {
                  "type": "object",
                  "required": [
                    "exerciseId"
                  ],
                  "properties": {
                    "exerciseId": {
                      "type": "string",
                      "description": "Unique identifier for the exercise. Applies when the exercise was created with the Algebrakit CMS."
                    },
                    "version": {
                      "type": "string",
                      "description": "Version of the exercise or 'latest' (default) to refer to the most current version."
                    }
                  }
                },
                {
                  "type": "object",
                  "required": [
                    "exerciseSpec"
                  ],
                  "properties": {
                    "exerciseSpec": {
                      "oneOf": [
                        {
                          "$ref": "#/components/schemas/IAK_Exercise"
                        },
                        {
                          "type": "object",
                          "description": "Exercise Specification generated with the Algebrakit Authoring Components. See https://docs.prod.algebrakit.com/pages/500-authoring/ for more information."
                        }
                      ],
                      "description": "JSON specification of the exercise. You can provide an exercise in the AK_Exercise format or use the Algebrakit's Authoring Components to create a specification, see https://docs.prod.algebrakit.com/pages/500-authoring/. For the full IAK_Exercise specification, see [Exercise Specification](https://docs.algebrakit.com/pages/315-exercise-specification/).\n"
                    }
                  }
                },
                {
                  "type": "object",
                  "required": [
                    "sessionId"
                  ],
                  "properties": {
                    "sessionId": {
                      "type": "string",
                      "description": "Identifier for an existing session. Use this to create multiple identical sessions from a random exercise."
                    },
                    "nr": {
                      "type": "integer",
                      "description": "Number of sessions to create. If not specified, the number of exercises in the session will be used."
                    }
                  }
                }
              ]
            }
          },
          "scoringModel": {
            "type": "string",
            "description": "Optional reference to a predefined scoring model. See [here](https://docs.algebrakit.com/pages/220-learning-data/#scoring) for more information."
          },
          "assessmentMode": {
            "type": "boolean",
            "description": "Assessment mode turns off the step-by-step evaluation, hints, and feedback for the student."
          },
          "requireLockForSolution": {
            "type": "boolean",
            "description": "Prevents obtaining solutions before the session is locked."
          },
          "studentFeedbackType": {
            "type": "string",
            "enum": [
              "ALL",
              "ICONS_ONLY",
              "ERRORS_ONLY",
              "NONE"
            ],
            "description": "Controls the level of feedback a student receives on their answers. Default behavior when not specified is ALL."
          },
          "options": {
            "type": "object",
            "properties": {
              "generateDebugInfo": {
                "type": "boolean",
                "description": "Whether to include debug information about the item in the response. Will also allow Algebrakit to infer symbol types if these are not defined."
              }
            },
            "description": "Optional configuration."
          },
          "apiVersion": {
            "type": "integer",
            "description": "API version to use for the request. Always set to 2.",
            "minimum": 2,
            "maximum": 2
          }
        }
      },
      "InteractionType": {
        "type": "string",
        "enum": [
          "MULTISTEP",
          "MATH_TABLE",
          "FILL_IN_THE_BLANKS",
          "GEOMETRY",
          "STATISTICS",
          "NUMBER_LINE",
          "ARITHMETIC",
          "CHOICE",
          "OPEN_ANSWER",
          "MODEL_METHOD",
          "MODEL_METHOD_FREEFORM"
        ],
        "description": "The question type of an interaction."
      },
      "InteractionDescription": {
        "type": "object",
        "description": "Details of an interaction (question type) within a session.",
        "properties": {
          "type": {
            "$ref": "#/components/schemas/InteractionType"
          },
          "marks": {
            "type": "number",
            "description": "Marks assigned to the interaction."
          },
          "scorable": {
            "type": "boolean",
            "description": "Indicates if the interaction is automatically scored."
          }
        }
      },
      "SessionData": {
        "type": "object",
        "required": [
          "success",
          "sessionId",
          "type",
          "html",
          "marksTotal",
          "interactions"
        ],
        "properties": {
          "success": {
            "type": "boolean",
            "description": "Indicates if the session was created successfully."
          },
          "msg": {
            "type": "string",
            "description": "Message providing additional information if creating the session failed."
          },
          "sessionId": {
            "type": "string",
            "description": "Unique identifier for the created session.",
            "example": "5658151f-a397-4abf-8256-8cd7aed472c1"
          },
          "type": {
            "type": "string",
            "enum": [
              "SINGLE",
              "COMPOUND"
            ],
            "description": "A compound exercise includes multiple questions, like question a, b, etc."
          },
          "solution": {
            "type": "boolean"
          },
          "html": {
            "type": "string",
            "description": "Optimized HTML code to include the session in a web page. This HTML code includes the initialization data required by the web component, which improves initialization time."
          },
          "marksTotal": {
            "type": "number",
            "example": 2,
            "description": "Total number of marks that can be earned in this exercise."
          },
          "interactions": {
            "type": "object",
            "description": "Details of interactions (question type) within the exercise.",
            "additionalProperties": {
              "$ref": "#/components/schemas/InteractionDescription"
            }
          }
        }
      },
      "CreateSessionResponse": {
        "type": "array",
        "description": "Response containing session creation results.",
        "items": {
          "type": "object",
          "properties": {
            "success": {
              "type": "boolean",
              "description": "Indicates if the request was successful. Note that a successful request does not guarantee that all sessions were created successfully."
            },
            "msg": {
              "type": "string",
              "description": "Error message if the request failed."
            },
            "sessions": {
              "type": "array",
              "description": "List of created sessions. This array aligns with the input array of exercises.",
              "items": {
                "$ref": "#/components/schemas/SessionData"
              }
            }
          }
        }
      },
      "SessionRetrieveRequest": {
        "type": "object",
        "required": [
          "sessionIds"
        ],
        "properties": {
          "sessionIds": {
            "type": "array",
            "description": "IDs of existing sessions.",
            "items": {
              "type": "string"
            }
          }
        }
      },
      "SessionRetrieveResponse": {
        "type": "array",
        "description": "List of sessions data objects. This array aligns with the input array of session IDs.",
        "items": {
          "$ref": "#/components/schemas/SessionData"
        }
      },
      "SessionScoreRequest": {
        "type": "object",
        "required": [
          "sessionId"
        ],
        "properties": {
          "sessionId": {
            "type": "string",
            "description": "Unique identifier for the session to score."
          },
          "lockSession": {
            "type": "boolean",
            "description": "Indicates if the session should be locked to prevent any future changes.",
            "default": false
          },
          "withEvents": {
            "type": "boolean",
            "description": "Include detailed informatin per event (evaluation, hint, etc) in the response. Default is true."
          },
          "withEventAnnotations": {
            "type": "boolean",
            "description": "Include detailed event annotations in the event results. Applies if `withEvents` is enabled. Default is true."
          },
          "withTags": {
            "type": "boolean",
            "description": "Include skill tags information in the response. Default is true."
          },
          "withTagDescriptions": {
            "type": "boolean",
            "description": "Include tag descriptions in the response. Default is true."
          }
        }
      },
      "ScoringResult": {
        "type": "object",
        "required": [
          "finished",
          "marksTotal",
          "marksEarned"
        ],
        "properties": {
          "finished": {
            "type": "boolean"
          },
          "marksTotal": {
            "type": "number"
          },
          "marksEarned": {
            "type": "number"
          },
          "penalties": {
            "type": "object",
            "properties": {
              "marksPenalty": {
                "type": "number"
              },
              "hintsRequested": {
                "type": "integer"
              },
              "mathErrors": {
                "type": "integer"
              }
            }
          }
        }
      },
      "ExerciseStatus": {
        "type": "string",
        "enum": [
          "FINISHED",
          "CORRECT",
          "ERROR",
          "VIRGIN",
          "SUBMITTED",
          "GIVEUP",
          "UNKNOWN"
        ]
      },
      "InteractionScoring": {
        "type": "object",
        "required": [
          "finished",
          "marksTotal",
          "marksEarned"
        ],
        "properties": {
          "finished": {
            "type": "boolean"
          },
          "marksTotal": {
            "type": "number"
          },
          "marksEarned": {
            "type": "number"
          },
          "penalties": {
            "type": "object",
            "properties": {
              "marksPenalty": {
                "type": "number"
              },
              "hintsRequested": {
                "type": "integer"
              },
              "mathErrors": {
                "type": "integer"
              }
            }
          }
        }
      },
      "SkillTag": {
        "type": "object",
        "required": [
          "id",
          "source"
        ],
        "properties": {
          "id": {
            "type": "string",
            "description": "Unique identifier for this skill."
          },
          "source": {
            "type": "string",
            "description": "What caused this skill detection.\n- ERROR_FEEDBACK: The skill relates to error feedback\n- HINT: The skill relatess to a hint\n- FINISHED_STEP: The skill is part of a derivation the student has completed\n- NEXT_STEP: This skill relates to the next step to take in a derivation that was uncompleted.\n",
            "enum": [
              "ERROR_FEEDBACK",
              "HINT",
              "FINISHED_STEP",
              "NEXT_STEP"
            ]
          },
          "weight": {
            "type": "integer",
            "description": "Applies when source is `ERROR_FEEDBACK`. A value between 0 and 100 indicating the relevance of this skill detection."
          },
          "errors": {
            "type": "array",
            "description": "Applies when source is `ERROR_FEEDBACK`. References to the misconceptions or mistakes that the error relates to.",
            "items": {
              "type": "string",
              "description": "Unique identifier of a mistake or misconception."
            }
          }
        }
      },
      "EventType": {
        "type": "string",
        "enum": [
          "EVALUATE",
          "HINT",
          "GIVEUP",
          "SUBMIT"
        ]
      },
      "AnnotationType": {
        "type": "string",
        "enum": [
          "HINT",
          "ERROR_FEEDBACK",
          "INPUT_EXPRESSION",
          "SELECTED_OPTIONS",
          "INPUT"
        ],
        "description": "Type of annotation in the session info response:\n- HINT: Hint provided to help the student\n- ERROR_FEEDBACK: Feedback about an error in the student's input\n- INPUT: Complete view of the question with student inputs at the time of the event (used in /session/info only)\n- INPUT_EXPRESSION: Expression entered by the student (used in /session/score only)\n- SELECTED_OPTIONS: Options selected by the student (used in /session/score only)\n"
      },
      "RichContent": {
        "type": "object",
        "required": [
          "content",
          "mimeType"
        ],
        "properties": {
          "content": {
            "type": "string"
          },
          "mimeType": {
            "type": "string"
          },
          "akit": {
            "type": "string"
          }
        }
      },
      "Annotation": {
        "type": "object",
        "required": [
          "type"
        ],
        "properties": {
          "type": {
            "$ref": "#/components/schemas/AnnotationType"
          },
          "expr": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/RichContent"
            }
          },
          "main": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/RichContent"
            }
          },
          "sub": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/RichContent"
            }
          }
        }
      },
      "InteractionEvent": {
        "type": "object",
        "properties": {
          "timestamp": {
            "type": "integer",
            "description": "Timestamp of the event in milliseconds since the epoch."
          },
          "event": {
            "$ref": "#/components/schemas/EventType"
          },
          "exerciseStatus": {
            "description": "Applies to evaluation events. The status of the students work for this math problem. \n",
            "$ref": "#/components/schemas/ExerciseStatus"
          },
          "inputStatus": {
            "description": "Applies to evaluation events. The status of the students work on the current part of this math problem. \n",
            "$ref": "#/components/schemas/ExerciseStatus"
          },
          "progress": {
            "type": "number",
            "description": "Value between 0 and 1 indicating the progress of the interaction. A value of 1 corresponds to a fully correct answer. Note that progress is not a mark."
          },
          "tags": {
            "type": "array",
            "description": "References to skill tags for this event, which indicate skills and optional misconceptions. Descriptions of these tags are provided in the `tagDescriptions` property of the session info.",
            "items": {
              "$ref": "#/components/schemas/SkillTag"
            }
          },
          "skillsTodo": {
            "type": "array",
            "description": "Estimate of skills needed to finish the derivation in this part. Descriptions of these skill IDs are provided in the `tagDescriptions` property of the session info.",
            "items": {
              "type": "string"
            }
          },
          "annotations": {
            "type": "array",
            "description": "Meaningful information about the event. What information is provided depends on the question type.",
            "items": {
              "$ref": "#/components/schemas/Annotation"
            }
          }
        }
      },
      "InteractionResult": {
        "type": "object",
        "required": [
          "id",
          "type",
          "status",
          "progress",
          "tags",
          "events"
        ],
        "properties": {
          "id": {
            "type": "string"
          },
          "type": {
            "type": "string",
            "description": "Interaction type, e.g. MULTISTEP"
          },
          "status": {
            "$ref": "#/components/schemas/ExerciseStatus"
          },
          "progress": {
            "type": "number",
            "format": "float",
            "minimum": 0,
            "maximum": 1,
            "description": "Progress in range [0..1]. Note that progress is not the same as marks."
          },
          "scoring": {
            "$ref": "#/components/schemas/InteractionScoring"
          },
          "tags": {
            "type": "array",
            "description": "References to skill tags for this interaction, compiled from errors, hints, completed derivations, and next step from \nincomplete derivations. See the `events`` property to see which event generated what skill tags. \nDescriptions of these tags are provided in the `tagDescriptions`` property of the session info.\n",
            "items": {
              "$ref": "#/components/schemas/SkillTag"
            }
          },
          "events": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/InteractionEvent"
            }
          }
        }
      },
      "QuestionResult": {
        "type": "object",
        "required": [
          "id",
          "interactions"
        ],
        "properties": {
          "id": {
            "type": "string"
          },
          "scoring": {
            "$ref": "#/components/schemas/ScoringResult"
          },
          "interactions": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/InteractionResult"
            }
          }
        }
      },
      "MultilanguageDescription": {
        "type": "object",
        "description": "A map from language code to a description.",
        "additionalProperties": {
          "type": "string"
        }
      },
      "TagDescriptions": {
        "type": "object",
        "description": "A map from a Skill Tag to the skill specification.",
        "additionalProperties": {
          "type": "object",
          "properties": {
            "descr": {
              "$ref": "#/components/schemas/MultilanguageDescription"
            },
            "stepType": {
              "type": "string",
              "enum": [
                "STRATEGY",
                "ALGEBRA",
                "CALCULATE",
                "ROUND",
                "CONCEPT"
              ]
            },
            "errors": {
              "type": "array",
              "description": "List of errors associated with this skill.",
              "items": {
                "type": "object",
                "properties": {
                  "id": {
                    "type": "string",
                    "description": "Unique identifier for the error."
                  },
                  "type": {
                    "type": "array",
                    "items": {
                      "type": "string",
                      "enum": [
                        "misconception",
                        "mistake"
                      ]
                    }
                  },
                  "descr": {
                    "$ref": "#/components/schemas/MultilanguageDescription"
                  }
                }
              }
            }
          }
        }
      },
      "SessionScoreResponse": {
        "type": "object",
        "required": [
          "success",
          "questions",
          "scoring"
        ],
        "properties": {
          "questions": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/QuestionResult"
            }
          },
          "tagDescriptions": {
            "$ref": "#/components/schemas/TagDescriptions"
          },
          "scoring": {
            "$ref": "#/components/schemas/ScoringResult"
          }
        }
      },
      "SessionLockRequest": {
        "type": "object",
        "required": [
          "action",
          "sessionIds"
        ],
        "properties": {
          "action": {
            "type": "string",
            "enum": [
              "LOCK",
              "UNLOCK",
              "FINALIZE"
            ],
            "description": "Action to perform on the sessions. LOCK applies a reversible lock. FINALIZE applies a permanent lock."
          },
          "sessionIds": {
            "type": "array",
            "description": "List of session IDs to lock or unlock.",
            "items": {
              "type": "string"
            }
          }
        }
      },
      "SessionLockResponse": {
        "type": "object",
        "properties": {}
      },
      "SessionInfoRequest": {
        "type": "object",
        "required": [
          "sessionId"
        ],
        "properties": {
          "sessionId": {
            "type": "string",
            "description": "Unique identifier for the session to retrieve information for."
          },
          "withDerivations": {
            "type": "boolean",
            "description": "Include step-by-step derivations in the response. Default is true."
          },
          "withEvents": {
            "type": "boolean",
            "description": "Include detailed informatin per event (evaluation, hint, etc) in the response. Default is true."
          },
          "withEventAnnotations": {
            "type": "boolean",
            "description": "Include detailed event annotations in the event results. Applies if `withEvents` is enabled. Default is true."
          },
          "withTags": {
            "type": "boolean",
            "description": "Include skill tags information in the response. Default is true."
          },
          "withTagDescriptions": {
            "type": "boolean",
            "description": "Include tag descriptions in the response. Default is true."
          },
          "withScoring": {
            "type": "boolean",
            "description": "Include scoring information in the response. Default is true."
          }
        }
      },
      "ElementItemInfoBase": {
        "type": "object",
        "properties": {
          "status": {
            "type": "string"
          },
          "score": {
            "type": "number"
          }
        }
      },
      "DerivationPart": {
        "oneOf": [
          {
            "type": "object",
            "required": [
              "hint"
            ],
            "properties": {
              "hint": {
                "type": "string"
              }
            }
          },
          {
            "type": "object",
            "required": [
              "expression"
            ],
            "properties": {
              "expression": {
                "type": "string"
              }
            }
          },
          {
            "type": "object",
            "required": [
              "result"
            ],
            "properties": {
              "description": {
                "type": "string"
              },
              "derivation": {
                "type": "array",
                "items": {
                  "$ref": "#/components/schemas/DerivationPart"
                }
              },
              "result": {
                "type": "string"
              },
              "skills": {
                "type": "array",
                "description": "Estimate of skills needed to perform this step. Descriptions of these skill IDs are provided in the tagDescriptions.",
                "items": {
                  "type": "string"
                }
              }
            }
          }
        ]
      },
      "InfoAnnotation": {
        "type": "object",
        "required": [
          "type"
        ],
        "properties": {
          "type": {
            "$ref": "#/components/schemas/AnnotationType"
          },
          "expression": {
            "type": "string",
            "description": "Mathematical expression in LaTeX format. \nFor inline math inputs, uses \\boxed{\\color{blue} ...} to highlight input fields.\nReplaces the former 'expr' field.\n"
          },
          "content": {
            "type": "string",
            "description": "Annotation content in HTML format. This field combines the former 'main', 'sub', and 'text' fields.\nFor INPUT type annotations, contains the complete question view with student inputs encoded as:\n- <math-field> tags for mathematical input fields\n- <choice-field label=\"X\"> tags for multiple choice options\n- \\boxed{\\color{blue} ...} for inline math expression inputs\n"
          },
          "gapIndex": {
            "type": "integer",
            "description": "Index of the gap in a Fill in the Blanks question, starting from 1"
          },
          "row": {
            "type": "integer",
            "description": "Row index in a Math Table question, starting from 1"
          },
          "col": {
            "type": "integer",
            "description": "Column index in a Math Table question, starting from 1"
          }
        }
      },
      "EventResultInfo": {
        "type": "object",
        "required": [
          "timestamp",
          "event"
        ],
        "properties": {
          "timestamp": {
            "type": "integer",
            "description": "Timestamp of the event in milliseconds since the epoch."
          },
          "event": {
            "$ref": "#/components/schemas/EventType"
          },
          "exerciseStatus": {
            "description": "Applies to evaluation events. The status of the students work for this math problem. \n",
            "$ref": "#/components/schemas/ExerciseStatus"
          },
          "inputStatus": {
            "description": "Applies to evaluation events. The status of the students work on the current part of this math problem. \n",
            "$ref": "#/components/schemas/ExerciseStatus"
          },
          "tags": {
            "type": "array",
            "description": "References to skill tags for this event, which indicate skills and optional misconceptions. Descriptions of these tags are provided in the `tagDescriptions` property of the session info.",
            "items": {
              "$ref": "#/components/schemas/SkillTag"
            }
          },
          "skillsTodo": {
            "type": "array",
            "description": "Estimate of skills needed to finish the derivation in this part. Descriptions of these skill IDs are provided in the `tagDescriptions` property of the session info.",
            "items": {
              "type": "string"
            }
          },
          "annotations": {
            "type": "array",
            "description": "Meaningful information about the event. What information is provided depends on the question type.",
            "items": {
              "$ref": "#/components/schemas/InfoAnnotation"
            }
          }
        }
      },
      "InteractionResultInfo": {
        "type": "object",
        "required": [
          "id",
          "type",
          "status",
          "progress",
          "tags",
          "events"
        ],
        "properties": {
          "status": {
            "$ref": "#/components/schemas/ExerciseStatus"
          },
          "progress": {
            "type": "number",
            "format": "float",
            "minimum": 0,
            "maximum": 1,
            "description": "Progress in range [0..1]. Note that progress is not the same as marks."
          },
          "scoring": {
            "$ref": "#/components/schemas/InteractionScoring"
          },
          "tags": {
            "type": "array",
            "description": "References to skill tags for this interaction, compiled from errors, hints, completed derivations, and next step from \nincomplete derivations. See the `events`` property to see which event generated what skill tags. \nDescriptions of these tags are provided in the `tagDescriptions`` property of the session info.\n",
            "items": {
              "$ref": "#/components/schemas/SkillTag"
            }
          },
          "events": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/EventResultInfo"
            }
          }
        }
      },
      "InteractionInfo": {
        "type": "object",
        "allOf": [
          {
            "$ref": "#/components/schemas/ElementItemInfoBase"
          },
          {
            "type": "object",
            "required": [
              "id",
              "itemType",
              "interactionType",
              "solution",
              "result"
            ],
            "properties": {
              "id": {
                "type": "string",
                "description": "Unique identifier ('ref-id') for this interaction."
              },
              "itemType": {
                "type": "string",
                "enum": [
                  "INTERACTION"
                ]
              },
              "interactionType": {
                "$ref": "#/components/schemas/InteractionType"
              },
              "content": {
                "type": "string",
                "nullable": true
              },
              "solution": {
                "type": "string"
              },
              "derivation": {
                "type": "array",
                "items": {
                  "$ref": "#/components/schemas/DerivationPart"
                },
                "nullable": true
              },
              "result": {
                "$ref": "#/components/schemas/InteractionResultInfo"
              }
            }
          }
        ]
      },
      "TextItemInfo": {
        "type": "object",
        "allOf": [
          {
            "$ref": "#/components/schemas/ElementItemInfoBase"
          },
          {
            "type": "object",
            "required": [
              "itemType",
              "content"
            ],
            "properties": {
              "itemType": {
                "type": "string",
                "enum": [
                  "TEXT"
                ]
              },
              "content": {
                "type": "string",
                "description": "The content, which can include HTML tags for tables, lists, and other formatting. Mathematical expressions are encoded in latex and wrapped in $ ... $."
              }
            }
          }
        ]
      },
      "ElementItemInfo": {
        "type": "object",
        "required": [
          "itemType"
        ],
        "discriminator": {
          "propertyName": "itemType"
        },
        "oneOf": [
          {
            "$ref": "#/components/schemas/InteractionInfo"
          },
          {
            "$ref": "#/components/schemas/TextItemInfo"
          }
        ]
      },
      "ElementInfo": {
        "type": "object",
        "description": "An Element is either a question block or a content block.",
        "properties": {
          "id": {
            "type": "string",
            "description": "Unique identifier ('ref-id') for this element block."
          },
          "type": {
            "type": "string",
            "enum": [
              "INSTRUCTION",
              "QUESTION"
            ],
            "description": "The type of the element. INSTRUCTION elements have no scorable interactions. QUESTION elements contain one or more scorable interactions."
          },
          "items": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/ElementItemInfo"
            }
          }
        }
      },
      "SessionInfoResponse": {
        "type": "object",
        "required": [
          "elements",
          "tagDescriptions"
        ],
        "properties": {
          "elements": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/ElementInfo"
            }
          },
          "tagDescriptions": {
            "$ref": "#/components/schemas/TagDescriptions"
          },
          "scoring": {
            "$ref": "#/components/schemas/ScoringResult"
          }
        }
      },
      "ExerciseValidateRequest": {
        "oneOf": [
          {
            "type": "object",
            "required": [
              "exerciseId"
            ],
            "properties": {
              "exerciseId": {
                "type": "string",
                "description": "Unique identifier for the session to score."
              },
              "version": {
                "oneOf": [
                  {
                    "type": "string"
                  },
                  {
                    "type": "number"
                  }
                ],
                "description": "The published version number of the exercise (number) or 'latest' (default). The latter refers to the current version of the exercise."
              }
            }
          },
          {
            "type": "object",
            "required": [
              "exerciseSpec"
            ],
            "properties": {
              "exerciseSpec": {
                "oneOf": [
                  {
                    "$ref": "#/components/schemas/IAK_Exercise"
                  },
                  {
                    "type": "object",
                    "description": "Legacy exercise specification format (internal format)"
                  }
                ],
                "description": "An exercise specification in the AK_Exercise format (recommended) or as obtained from the exercise authoring tool. For the full IAK_Exercise specification, see [Exercise Specification](https://docs.algebrakit.com/pages/315-exercise-specification/).\n"
              }
            }
          }
        ]
      },
      "ExerciseValidateResponse": {
        "type": "object",
        "required": [
          "valid"
        ],
        "properties": {
          "success": {
            "type": "boolean",
            "description": "Indicates if the request was successful."
          },
          "valid": {
            "type": "boolean",
            "description": "If false, this exercise has a problem and is not suitable to create sessions."
          },
          "msg": {
            "type": "string",
            "description": "A description of the problem in case the request failed or the exercise is not valid"
          },
          "marks": {
            "type": "number",
            "description": "The number of marks for the exercise."
          },
          "random": {
            "type": "boolean",
            "description": "Indicates if the exercise is random."
          },
          "interactions": {
            "type": "object",
            "description": "Details of interactions (question type) within the exercise.",
            "additionalProperties": {
              "$ref": "#/components/schemas/InteractionDescription"
            }
          }
        }
      },
      "ExerciseInfoRequest": {
        "type": "object",
        "description": "Request to retrieve information about an exercise.",
        "required": [
          "id"
        ],
        "properties": {
          "id": {
            "type": "string",
            "description": "The exercise ID."
          }
        }
      },
      "ExerciseInfoCommitData": {
        "type": "object",
        "description": "Commit data for an exercise.",
        "properties": {
          "versionNumber": {
            "type": "string"
          },
          "commitDate": {
            "type": "string",
            "format": "date-time"
          },
          "commitMessage": {
            "type": "string"
          },
          "authorUsername": {
            "type": "string"
          }
        }
      },
      "ExerciseInfoInteraction": {
        "type": "object",
        "description": "Interaction info for an exercise version.",
        "properties": {
          "block": {
            "description": "Describes where the interaction is located.",
            "type": "string"
          },
          "refId": {
            "description": "The ID of the interaction in the exercise.",
            "type": "string"
          },
          "refName": {
            "description": "The name of the interaction in the exercise editor.",
            "type": "string"
          },
          "type": {
            "$ref": "#/components/schemas/InteractionType"
          }
        }
      },
      "ExerciseInfoResource": {
        "type": "object",
        "description": "Resource info for an exercise version.",
        "properties": {
          "refId": {
            "description": "The ID of the resource in the exercise.",
            "type": "string"
          },
          "type": {
            "type": "string"
          },
          "refName": {
            "description": "The name of the resource in the exercise editor.",
            "type": "string"
          }
        }
      },
      "ExerciseInfoPublishedVersion": {
        "type": "object",
        "description": "Published version info for an exercise.",
        "properties": {
          "name": {
            "type": "string"
          },
          "majorVersion": {
            "oneOf": [
              {
                "type": "integer"
              },
              {
                "type": "string",
                "enum": [
                  "latest"
                ]
              }
            ]
          },
          "metadata": {
            "type": "object",
            "additionalProperties": {
              "type": "string"
            }
          },
          "contentVersion": {
            "type": "string"
          },
          "numberOfLevels": {
            "type": "integer"
          },
          "interactions": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/ExerciseInfoInteraction"
            }
          },
          "resources": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/ExerciseInfoResource"
            }
          }
        }
      },
      "ExerciseInfoResponse": {
        "type": "object",
        "description": "Information about the structure of the exercise.",
        "properties": {
          "commitHistory": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/ExerciseInfoCommitData"
            }
          },
          "id": {
            "type": "string"
          },
          "publishedVersions": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/ExerciseInfoPublishedVersion"
            }
          },
          "courseName": {
            "type": "string"
          },
          "type": {
            "type": "string",
            "description": "regular exercise, single reference, or arrangement exercise"
          }
        }
      }
    },
    "examples": {
      "CreateSessionRequestExampleMultiple": {
        "value": {
          "exercises": [
            {
              "exerciseId": "fa42e943-8213-41a6-8a91-8c22a929ffe9",
              "version": "latest"
            },
            {
              "exerciseId": "0ce4c011-28e3-4423-9429-75ae28e3bc10",
              "version": "latest"
            }
          ],
          "assessmentMode": true,
          "scoringModel": "default",
          "apiVersion": 2
        }
      },
      "CreateSessionResponseExample": {
        "value": [
          {
            "success": true,
            "sessions": [
              {
                "success": true,
                "sessionId": "691ddb39-e830-41ae-8f97-8c94dcb6120b",
                "type": "SINGLE",
                "solution": false,
                "marksTotal": 1,
                "interactions": {
                  "lNzHy": {
                    "type": "MULTISTEP",
                    "marks": 1,
                    "scorable": true
                  }
                },
                "html": "<akit-exercise session-id=\"691ddb39-e830-41ae-8f97-8c94dcb6120b\"><script type=\"algebrakit/init-data\">{...}</script></akit-exercise>"
              }
            ]
          },
          {
            "success": true,
            "sessions": [
              {
                "success": true,
                "sessionId": "62ea6f14-bfcc-42a7-8682-7aff31339e24",
                "type": "SINGLE",
                "solution": false,
                "marksTotal": 1,
                "interactions": {
                  "mFzbB": {
                    "type": "GEOMETRY",
                    "marks": 1,
                    "scorable": true
                  }
                },
                "html": "<akit-exercise session-id=\"62ea6f14-bfcc-42a7-8682-7aff31339e24\"><script type=\"algebrakit/init-data\">{...}</script></akit-exercise>"
              }
            ]
          }
        ]
      },
      "SessionRetrieveRequestExample": {
        "value": {
          "sessionIds": [
            "77aca88f-e2f4-4daf-ba2e-41008fee1f9a"
          ]
        }
      },
      "SessionRetrieveResponseExample": {
        "value": [
          {
            "success": true,
            "sessionId": "77aca88f-e2f4-4daf-ba2e-41008fee1f9a",
            "type": "SINGLE",
            "solution": false,
            "marksTotal": 1,
            "interactions": {
              "lNzHy": {
                "type": "MULTISTEP",
                "marks": 1,
                "scorable": true
              }
            },
            "html": "<akit-exercise session-id=\"77aca88f-e2f4-4daf-ba2e-41008fee1f9a\" app-id=\"algebrakit.testbench-akit-main-v2_default\" akit-init=\"inline\" ><script type=\"algebrakit/init-data\">{\"events\":{\"_main\":[{\"name\":\"createQuestion\",\"timestamp\":1752395839521,\"in\":{\"id\":\"Q1\"},\"out\":{\"newQuestionId\":\"Q1\",\"interactions\":[{\"refId\":\"lNzHy\"}]}}],\"lNzHy\":[{\"name\":\"evaluate\",\"timestamp\":1752395844080,\"in\":{\"type\":\"evaluate\",\"input\":[{\"type\":\"expression\",\"expression\":\"6p-1=4p+10\",\"syntax\":\"LATEX\"}]},\"out\":{\"success\":true,\"score\":{\"marks\":{\"max\":0,\"min\":0},\"marksEarned\":0,\"marksTotal\":1,\"penalties\":{\"marksPenalty\":0,\"hintsRequested\":0,\"mathErrors\":1},\"finished\":false,\"stepList\":[{\"parents\":[],\"name\":\"solution\",\"latexName\":null,\"definitionIndex\":0,\"marks\":1,\"marksMin\":0,\"marksMax\":0,\"description\":null}]},\"progress\":0,\"exerciseStatus\":\"CORRECT\",\"tags\":[{\"ID\":\"ExpandSingleBrackets\",\"weight\":100,\"source\":\"ERROR_FEEDBACK\",\"errors\":[\"SkippingTerms\"]}],\"strategy\":{\"stepList\":[{\"parents\":[],\"name\":\"solution\",\"latexName\":null,\"definitionIndex\":0,\"marks\":1,\"marksMin\":0,\"marksMax\":0,\"description\":null}],\"marksMin\":0,\"marksMax\":0,\"marksTotal\":1,\"marks\":1},\"hintAvailable\":true,\"inputResultList\":[{\"type\":\"expression\",\"status\":\"ERROR\",\"tags\":[{\"ID\":\"ExpandSingleBrackets\",\"weight\":100,\"source\":\"ERROR_FEEDBACK\",\"errors\":[\"SkippingTerms\"]}],\"inputExp\":[{\"mimeType\":\"application/x-tex\",\"content\":\"$$6p-1=4p+10$$\"}],\"feedbackList\":[{\"expression\":[{\"mimeType\":\"application/x-tex\",\"content\":\"$$6 p - \\\\begingroup\\\\color{darkred}\\\\begingroup 1\\\\endgroup\\\\endgroup=4 p + 10$$\",\"akit\":\"DerivationContext[Solve[6 p+Highlight[-1]=4 p+10, p, True],Exact=>True]\"}],\"description\":{\"id\":\"`@backward/algebra/expand/expand/title1 `\",\"headLine\":[{\"mimeType\":\"text/plain\",\"content\":\"You did not compute the multiplication correctly.\"}],\"subLine\":[{\"mimeType\":\"text/plain\",\"content\":\"You did not multiply all terms of \"},{\"mimeType\":\"application/x-tex\",\"content\":\"$p - 1$\",\"akit\":\"p+-1\"},{\"mimeType\":\"text/plain\",\"content\":\" by \"},{\"mimeType\":\"application/x-tex\",\"content\":\"$6$\",\"akit\":\"6\"},{\"mimeType\":\"text/plain\",\"content\":\".\"}]},\"tags\":[{\"ID\":\"ExpandSingleBrackets\",\"weight\":100,\"source\":\"ERROR_FEEDBACK\",\"errors\":[\"SkippingTerms\"]}]}],\"node\":{\"v\":\"_solution\",\"parents\":[],\"lead\":[{\"mimeType\":\"application/x-tex\",\"content\":\"$$6 \\\\left(p - 1\\\\right)=4 p + 10$$\",\"akit\":\"DerivationContext[Solve[6(p+-1)=4 p+10, p, True],Exact=>True]\"}],\"isLeadHighlighted\":false,\"hintAvailable\":true,\"trivial\":false},\"derivationSkillTags\":[\"ExpandSingleBrackets\",\"EquationsBalanceMethodArrangeTerms\",\"EquationsOperationsAdd\",\"AlgebraAddingLikeTerms\",\"EquationsBalanceMethodArrangeTerms\",\"EquationsOperationsAdd\",\"EquationsBalanceMethodDivideCoefficient\",\"EquationsOperationsMultiply\"],\"progress\":0}]}},{\"name\":\"evaluate\",\"timestamp\":1752395846387,\"in\":{\"type\":\"evaluate\",\"input\":[{\"type\":\"expression\",\"expression\":\"6p-6=4p+10\",\"syntax\":\"LATEX\"}]},\"out\":{\"success\":true,\"score\":{\"marks\":{\"max\":0,\"min\":0},\"marksEarned\":0,\"marksTotal\":1,\"penalties\":{\"marksPenalty\":0,\"hintsRequested\":0,\"mathErrors\":1},\"finished\":false,\"stepList\":[{\"parents\":[],\"name\":\"solution\",\"latexName\":null,\"definitionIndex\":0,\"marks\":1,\"marksMin\":0,\"marksMax\":0,\"description\":null}]},\"progress\":0,\"exerciseStatus\":\"CORRECT\",\"tags\":[{\"ID\":\"EquationsBalanceMethodArrangeTerms\",\"source\":\"NEXT_STEP\"},{\"ID\":\"EquationsOperationsAdd\",\"source\":\"NEXT_STEP\"}],\"strategy\":{\"stepList\":[{\"parents\":[],\"name\":\"solution\",\"latexName\":null,\"definitionIndex\":0,\"marks\":1,\"marksMin\":0,\"marksMax\":0,\"description\":null}],\"marksMin\":0,\"marksMax\":0,\"marksTotal\":1,\"marks\":1},\"hintAvailable\":true,\"inputResultList\":[{\"type\":\"expression\",\"status\":\"CORRECT\",\"tags\":[],\"inputExp\":[{\"mimeType\":\"application/x-tex\",\"content\":\"$$6p-6=4p+10$$\"}],\"node\":{\"v\":\"_solution\",\"parents\":[],\"lead\":[{\"mimeType\":\"application/x-tex\",\"content\":\"$$6 p - 6=4 p + 10$$\",\"akit\":\"DerivationContext[Solve[6 p+-6=4 p+10, p, True],Exact=>True]\"}],\"isLeadHighlighted\":false,\"hintAvailable\":true,\"trivial\":false},\"derivationSkillTags\":[\"ExpandSingleBrackets\",\"EquationsBalanceMethodArrangeTerms\",\"EquationsOperationsAdd\",\"AlgebraAddingLikeTerms\",\"EquationsBalanceMethodArrangeTerms\",\"EquationsOperationsAdd\",\"EquationsBalanceMethodDivideCoefficient\",\"EquationsOperationsMultiply\"],\"remainingSkillTags\":[\"EquationsBalanceMethodArrangeTerms\",\"EquationsOperationsAdd\",\"AlgebraAddingLikeTerms\",\"EquationsBalanceMethodDivideCoefficient\",\"EquationsOperationsMultiply\"],\"nextStepSkillTags\":[\"EquationsBalanceMethodArrangeTerms\",\"EquationsOperationsAdd\"],\"progress\":0}]}},{\"name\":\"hint\",\"timestamp\":1752395850393,\"in\":{\"type\":\"hint\",\"sessionId\":\"77aca88f-e2f4-4daf-ba2e-41008fee1f9a\",\"refId\":\"lNzHy\"},\"out\":{\"hintNode\":{\"v\":\"_solution\",\"parents\":[],\"taskList\":[{\"id\":\"`@vergelijkingen/linear/balansmethode_(variabele)/title `\",\"headLine\":[{\"mimeType\":\"text/plain\",\"content\":\"Balance method: subtract \"},{\"mimeType\":\"application/x-tex\",\"content\":\"$4 p $\",\"akit\":\"4 p\"},{\"mimeType\":\"text/plain\",\"content\":\" from both sides\"}]}],\"lead\":[{\"mimeType\":\"application/x-tex\",\"content\":\"$$\\\\begingroup\\\\color{#336699}\\\\begingroup 6 p \\\\endgroup\\\\endgroup- 6=\\\\begingroup\\\\color{#336699}\\\\begingroup 4 p \\\\endgroup\\\\endgroup+ 10$$\",\"akit\":\"DerivationContext[Highlight[6 p]+-6=Highlight[4 p]+10,Exact=>True]\"}],\"isLeadHighlighted\":true,\"hintAvailable\":true,\"trivial\":false},\"completedNodesForGoal\":[],\"completedNodesForHint\":[],\"dataNodesForGoal\":[],\"dataNodesForHint\":[],\"nextHintAvailable\":false,\"tags\":[{\"ID\":\"EquationsBalanceMethodArrangeTerms\",\"source\":\"HINT\"},{\"ID\":\"EquationsOperationsAdd\",\"source\":\"HINT\"}],\"empty\":false,\"success\":true,\"score\":{\"marks\":{\"max\":0,\"min\":0},\"marksEarned\":0,\"marksTotal\":1,\"penalties\":{\"marksPenalty\":0,\"hintsRequested\":1,\"mathErrors\":1},\"finished\":false,\"stepList\":[{\"parents\":[],\"name\":\"solution\",\"latexName\":null,\"definitionIndex\":0,\"marks\":1,\"marksMin\":0,\"marksMax\":0,\"description\":null}]}}},{\"name\":\"evaluate\",\"timestamp\":1752395852101,\"in\":{\"type\":\"evaluate\",\"input\":[{\"type\":\"expression\",\"expression\":\"2p=16\",\"syntax\":\"LATEX\"}]},\"out\":{\"success\":true,\"score\":{\"marks\":{\"max\":0,\"min\":0},\"marksEarned\":0,\"marksTotal\":1,\"penalties\":{\"marksPenalty\":0,\"hintsRequested\":1,\"mathErrors\":1},\"finished\":false,\"stepList\":[{\"parents\":[],\"name\":\"solution\",\"latexName\":null,\"definitionIndex\":0,\"marks\":1,\"marksMin\":0,\"marksMax\":0,\"description\":null}]},\"progress\":0,\"exerciseStatus\":\"CORRECT\",\"tags\":[{\"ID\":\"EquationsBalanceMethodDivideCoefficient\",\"source\":\"NEXT_STEP\"},{\"ID\":\"EquationsOperationsMultiply\",\"source\":\"NEXT_STEP\"}],\"strategy\":{\"stepList\":[{\"parents\":[],\"name\":\"solution\",\"latexName\":null,\"definitionIndex\":0,\"marks\":1,\"marksMin\":0,\"marksMax\":0,\"description\":null}],\"marksMin\":0,\"marksMax\":0,\"marksTotal\":1,\"marks\":1},\"hintAvailable\":true,\"inputResultList\":[{\"type\":\"expression\",\"status\":\"CORRECT\",\"tags\":[],\"inputExp\":[{\"mimeType\":\"application/x-tex\",\"content\":\"$$2p=16$$\"}],\"node\":{\"v\":\"_solution\",\"parents\":[],\"lead\":[{\"mimeType\":\"application/x-tex\",\"content\":\"$$2 p =16$$\",\"akit\":\"DerivationContext[Solve[2 p=16, p, True],Exact=>True]\"}],\"isLeadHighlighted\":false,\"hintAvailable\":true,\"trivial\":false},\"derivationSkillTags\":[\"ExpandSingleBrackets\",\"EquationsBalanceMethodArrangeTerms\",\"EquationsOperationsAdd\",\"AlgebraAddingLikeTerms\",\"EquationsBalanceMethodArrangeTerms\",\"EquationsOperationsAdd\",\"EquationsBalanceMethodDivideCoefficient\",\"EquationsOperationsMultiply\"],\"remainingSkillTags\":[\"EquationsBalanceMethodDivideCoefficient\",\"EquationsOperationsMultiply\"],\"nextStepSkillTags\":[\"EquationsBalanceMethodDivideCoefficient\",\"EquationsOperationsMultiply\"],\"progress\":0}]}},{\"name\":\"evaluate\",\"timestamp\":1752395854898,\"in\":{\"type\":\"evaluate\",\"input\":[{\"type\":\"expression\",\"expression\":\"p=\\\\frac{16}{2}\",\"syntax\":\"LATEX\"}]},\"out\":{\"success\":true,\"score\":{\"marks\":{\"max\":0,\"min\":0},\"marksEarned\":0,\"marksTotal\":1,\"penalties\":{\"marksPenalty\":0,\"hintsRequested\":1,\"mathErrors\":1},\"finished\":false,\"stepList\":[{\"parents\":[],\"name\":\"solution\",\"latexName\":null,\"definitionIndex\":0,\"marks\":1,\"marksMin\":0,\"marksMax\":0,\"description\":null}]},\"progress\":0.5,\"exerciseStatus\":\"CORRECT\",\"tags\":[],\"strategy\":{\"stepList\":[{\"parents\":[],\"name\":\"solution\",\"latexName\":null,\"definitionIndex\":0,\"marks\":1,\"marksMin\":0,\"marksMax\":0,\"description\":null}],\"marksMin\":0,\"marksMax\":0,\"marksTotal\":1,\"marks\":1},\"hintAvailable\":true,\"inputResultList\":[{\"type\":\"expression\",\"status\":\"CORRECT\",\"tags\":[],\"inputExp\":[{\"mimeType\":\"application/x-tex\",\"content\":\"$$p=\\\\frac{16}{2}$$\"}],\"node\":{\"v\":\"_solution\",\"parents\":[],\"lead\":[{\"mimeType\":\"application/x-tex\",\"content\":\"$$p =\\\\frac{16}{2}$$\",\"akit\":\"DerivationContext[Solve[p=16/2, p, True],Exact=>True]\"}],\"isLeadHighlighted\":false,\"hintAvailable\":true,\"trivial\":false},\"derivationSkillTags\":[\"ExpandSingleBrackets\",\"EquationsBalanceMethodArrangeTerms\",\"EquationsOperationsAdd\",\"AlgebraAddingLikeTerms\",\"EquationsBalanceMethodArrangeTerms\",\"EquationsOperationsAdd\",\"EquationsBalanceMethodDivideCoefficient\",\"EquationsOperationsMultiply\"],\"remainingSkillTags\":[],\"nextStepSkillTags\":[],\"progress\":0.5}]}},{\"name\":\"hint\",\"timestamp\":1752395865482,\"in\":{\"type\":\"hint\",\"sessionId\":\"77aca88f-e2f4-4daf-ba2e-41008fee1f9a\",\"refId\":\"lNzHy\"},\"out\":{\"hintNode\":{\"v\":\"_solution\",\"parents\":[],\"taskList\":[{\"id\":\"`@rekenen/delen_arithmetic/title `\",\"headLine\":[{\"mimeType\":\"text/plain\",\"content\":\"Calculate: \"},{\"mimeType\":\"application/x-tex\",\"content\":\"$\\\\frac{16}{2}$\",\"akit\":\"16/2\"}]}],\"lead\":[{\"mimeType\":\"application/x-tex\",\"content\":\"$$p =\\\\begingroup\\\\color{#336699}\\\\begingroup \\\\frac{16}{2}\\\\endgroup\\\\endgroup$$\",\"akit\":\"DerivationContext[Solve[p=Highlight[16/2], p, True],Exact=>True]\"}],\"isLeadHighlighted\":true,\"hintAvailable\":true,\"trivial\":false},\"completedNodesForGoal\":[],\"completedNodesForHint\":[],\"dataNodesForGoal\":[],\"dataNodesForHint\":[],\"nextHintAvailable\":false,\"empty\":false,\"success\":true,\"score\":{\"marks\":{\"max\":0,\"min\":0},\"marksEarned\":0,\"marksTotal\":1,\"penalties\":{\"marksPenalty\":0,\"hintsRequested\":2,\"mathErrors\":1},\"finished\":false,\"stepList\":[{\"parents\":[],\"name\":\"solution\",\"latexName\":null,\"definitionIndex\":0,\"marks\":1,\"marksMin\":0,\"marksMax\":0,\"description\":null}]}}}]},\"view\":{\"i18n\":[\"uk\",\"en\"],\"showHints\":true,\"numeralSystem\":\"ARABIC_DECIMALPOINT\",\"elements\":[{\"id\":\"Q1\",\"type\":\"QUESTION\",\"instructionType\":\"SCRIPT\",\"content\":[{\"mimeType\":\"text/plain\",\"content\":\"<div data-ref-id=\\\"YGJ5Y\\\" data-ref-name=\\\"Block 1\\\">Solve the equation.</div>\"}],\"interactions\":[{\"id\":\"lNzHy\",\"ans\":{\"id\":\"solution\",\"type\":\"ALGEBRA\",\"hasHint\":true,\"startExpression\":[{\"mimeType\":\"application/x-tex\",\"content\":\"$$6\\\\left ( p - 1\\\\right ) = 4p + 10$$\",\"akit\":\"Solve[VisualConcat[FormattedNumber[6, 0, 0], VisualFenced[VisualConcat[p, SymbolMinus, FormattedNumber[1, 0, 0]], SymbolLeftBracket, SymbolRightBracket], SymbolEquals, FormattedNumber[4, 0, 0], p, SymbolPlus, FormattedNumber[10, 0, 0]], p]\"}]},\"palette\":\"advanced\",\"variables\":[\"$p $\"],\"inline\":false,\"showHints\":true,\"hintAvailable\":true,\"widgetType\":\"AUTOMATIC\",\"i18n\":[\"uk\",\"en\"],\"numeralSystem\":\"ARABIC_DECIMALPOINT\",\"extendedInline\":false,\"interactionOptions\":{\"extendedInline\":false},\"enableCalculator\":true,\"scored\":true,\"marksTotal\":1}],\"resources\":[]}],\"assessmentMode\":false,\"questionMode\":\"ONE_BY_ONE\"},\"attributes\":{}}</script></akit-exercise>"
          }
        ]
      },
      "SessionScoreRequestExample": {
        "value": {
          "sessionId": "77aca88f-e2f4-4daf-ba2e-41008fee1f9a",
          "lockSession": true,
          "withTags": true,
          "withEvents": true,
          "withEventAnnotations": true,
          "withScoring": true
        }
      },
      "SessionScoreResponseExample": {
        "value": {
          "questions": [
            {
              "id": "Q1",
              "interactions": [
                {
                  "id": "lNzHy",
                  "type": "MULTISTEP",
                  "progress": 0.5,
                  "status": "CORRECT",
                  "events": [
                    {
                      "timestamp": 1752395844080,
                      "event": "EVALUATE",
                      "annotations": [
                        {
                          "type": "INPUT_EXPRESSION",
                          "expr": [
                            {
                              "content": "6p-1=4p+10",
                              "mimeType": "application/x-tex"
                            }
                          ]
                        },
                        {
                          "type": "ERROR_FEEDBACK",
                          "expr": [
                            {
                              "mimeType": "application/x-tex",
                              "content": "$$6 p - \\begingroup\\color{darkred}\\begingroup 1\\endgroup\\endgroup=4 p + 10$$",
                              "akit": "DerivationContext[Solve[6 p+Highlight[-1]=4 p+10, p, True],Exact=>True]"
                            }
                          ],
                          "main": [
                            {
                              "mimeType": "text/plain",
                              "content": "You did not compute the multiplication correctly."
                            }
                          ],
                          "sub": [
                            {
                              "mimeType": "text/plain",
                              "content": "You did not multiply all terms of "
                            },
                            {
                              "mimeType": "application/x-tex",
                              "content": "$p - 1$",
                              "akit": "p+-1"
                            },
                            {
                              "mimeType": "text/plain",
                              "content": " by "
                            },
                            {
                              "mimeType": "application/x-tex",
                              "content": "$6$",
                              "akit": "6"
                            },
                            {
                              "mimeType": "text/plain",
                              "content": "."
                            }
                          ]
                        }
                      ],
                      "exerciseStatus": "ERROR",
                      "progress": 0,
                      "inputStatus": "ERROR"
                    },
                    {
                      "timestamp": 1752395846387,
                      "event": "EVALUATE",
                      "annotations": [
                        {
                          "type": "INPUT_EXPRESSION",
                          "expr": [
                            {
                              "content": "6p-6=4p+10",
                              "mimeType": "application/x-tex"
                            }
                          ]
                        }
                      ],
                      "exerciseStatus": "CORRECT",
                      "progress": 0,
                      "inputStatus": "CORRECT"
                    },
                    {
                      "timestamp": 1752395850393,
                      "event": "HINT",
                      "annotations": [
                        {
                          "type": "HINT",
                          "main": [
                            {
                              "mimeType": "text/plain",
                              "content": "Balance method: subtract "
                            },
                            {
                              "mimeType": "application/x-tex",
                              "content": "$4 p $",
                              "akit": "4 p"
                            },
                            {
                              "mimeType": "text/plain",
                              "content": " from both sides"
                            }
                          ],
                          "expr": [
                            {
                              "mimeType": "application/x-tex",
                              "content": "$$\\begingroup\\color{#336699}\\begingroup 6 p \\endgroup\\endgroup- 6=\\begingroup\\color{#336699}\\begingroup 4 p \\endgroup\\endgroup+ 10$$",
                              "akit": "DerivationContext[Highlight[6 p]+-6=Highlight[4 p]+10,Exact=>True]"
                            }
                          ]
                        }
                      ]
                    },
                    {
                      "timestamp": 1752395852101,
                      "event": "EVALUATE",
                      "annotations": [
                        {
                          "type": "INPUT_EXPRESSION",
                          "expr": [
                            {
                              "content": "2p=16",
                              "mimeType": "application/x-tex"
                            }
                          ]
                        }
                      ],
                      "exerciseStatus": "CORRECT",
                      "progress": 0,
                      "inputStatus": "CORRECT"
                    },
                    {
                      "timestamp": 1752395854898,
                      "event": "EVALUATE",
                      "annotations": [
                        {
                          "type": "INPUT_EXPRESSION",
                          "expr": [
                            {
                              "content": "p=\\frac{16}{2}",
                              "mimeType": "application/x-tex"
                            }
                          ]
                        }
                      ],
                      "exerciseStatus": "CORRECT",
                      "progress": 0.5,
                      "inputStatus": "CORRECT"
                    },
                    {
                      "timestamp": 1752395865482,
                      "event": "HINT",
                      "annotations": [
                        {
                          "type": "HINT",
                          "main": [
                            {
                              "mimeType": "text/plain",
                              "content": "Calculate: "
                            },
                            {
                              "mimeType": "application/x-tex",
                              "content": "$\\frac{16}{2}$",
                              "akit": "16/2"
                            }
                          ],
                          "expr": [
                            {
                              "mimeType": "application/x-tex",
                              "content": "$$p =\\begingroup\\color{#336699}\\begingroup \\frac{16}{2}\\endgroup\\endgroup$$",
                              "akit": "DerivationContext[Solve[p=Highlight[16/2], p, True],Exact=>True]"
                            }
                          ]
                        }
                      ]
                    }
                  ],
                  "scoring": {
                    "marksEarned": 0,
                    "marksTotal": 1,
                    "penalties": {
                      "marksPenalty": 0,
                      "hintsRequested": 2,
                      "mathErrors": 1
                    },
                    "finished": false
                  }
                }
              ],
              "scoring": {
                "finished": false,
                "marksTotal": 1,
                "marksEarned": 0,
                "penalties": {
                  "marksPenalty": 0,
                  "hintsRequested": 2,
                  "mathErrors": 1
                }
              }
            }
          ],
          "scoring": {
            "finished": false,
            "marksEarned": 0,
            "marksTotal": 1,
            "penalties": {
              "marksPenalty": 0,
              "hintsRequested": 2,
              "mathErrors": 1
            }
          }
        }
      },
      "SessionLockRequestExample": {
        "value": {
          "action": "LOCK",
          "sessionIds": [
            "77aca88f-e2f4-4daf-ba2e-41008fee1f9a"
          ]
        }
      },
      "SessionInfoRequestExample": {
        "value": {
          "sessionId": "77aca88f-e2f4-4daf-ba2e-41008fee1f9a",
          "withDerivations": true,
          "withTags": true,
          "withEvents": true,
          "withEventAnnotations": true,
          "withScoring": true
        }
      },
      "SessionInfoResponseExample": {
        "value": {
          "success": true,
          "creationTimestamp": 1752395839,
          "elements": [
            {
              "id": "Q1",
              "type": "QUESTION",
              "items": [
                {
                  "itemType": "TEXT",
                  "content": "Solve the equation."
                },
                {
                  "itemType": "TEXT",
                  "content": "$$6\\left ( p - 1\\right ) = 4p + 10$$"
                },
                {
                  "id": "lNzHy",
                  "itemType": "INTERACTION",
                  "interactionType": "MULTISTEP",
                  "result": {
                    "status": "CORRECT",
                    "progress": 0.5,
                    "events": [
                      {
                        "timestamp": 1752395844080,
                        "event": "EVALUATE",
                        "tags": [
                          {
                            "id": "ExpandSingleBrackets",
                            "weight": 100,
                            "errors": [
                              "SkippingTerms"
                            ],
                            "source": "ERROR_FEEDBACK"
                          }
                        ],
                        "annotations": [
                          {
                            "type": "INPUT",
                            "content": "$6p-1=4p+10$"
                          },
                          {
                            "type": "ERROR_FEEDBACK",
                            "content": "<h1>You did not expand the parentheses correctly.</h1>You did not multiply all terms of  $p - 1$  by  $6$ .",
                            "expression": "$6 p - \\begingroup\\color{darkred}\\begingroup 1\\endgroup\\endgroup=4 p + 10$"
                          }
                        ],
                        "exerciseStatus": "ERROR",
                        "progress": 0,
                        "inputStatus": "ERROR"
                      }
                    ],
                    "scoring": {
                      "marksEarned": 0,
                      "marksTotal": 1,
                      "penalties": {
                        "marksPenalty": 0,
                        "hintsRequested": 2,
                        "mathErrors": 1
                      },
                      "finished": false
                    }
                  },
                  "solution": "$$p =8$$",
                  "derivation": [
                    {
                      "expression": "$$6 \\left(p - 1\\right)=4 p + 10$$"
                    },
                    {
                      "result": "$$6 p - 6=4 p + 10$$",
                      "skills": [
                        "ExpandSingleBrackets"
                      ],
                      "description": "Expand the brackets"
                    },
                    {
                      "result": "$$6 p - 4 p - 6=10$$",
                      "skills": [
                        "EquationsBalanceMethodArrangeTerms",
                        "EquationsOperationsAdd"
                      ],
                      "description": "Balance method: subtract  $4 p $  from both sides"
                    },
                    {
                      "result": "$$2 p - 6=10$$",
                      "skills": [
                        "AlgebraAddingLikeTerms"
                      ],
                      "description": "Combine the similar terms"
                    },
                    {
                      "result": "$$2 p =16$$",
                      "skills": [
                        "EquationsBalanceMethodArrangeTerms",
                        "EquationsOperationsAdd"
                      ],
                      "description": "Balance method: add  $6$  to both sides."
                    },
                    {
                      "result": "$$p =8$$",
                      "skills": [
                        "EquationsBalanceMethodDivideCoefficient",
                        "EquationsOperationsMultiply"
                      ],
                      "description": "Divide both sides by  $2$"
                    }
                  ]
                }
              ]
            }
          ],
          "tagDescriptions": {
            "ExpandSingleBrackets": {
              "descr": {
                "en": "Expanding a single pair of parentheses"
              },
              "stepType": "ALGEBRA",
              "errors": [
                {
                  "id": "SkippingTerms",
                  "type": [
                    "MISCONCEPTION"
                  ],
                  "descr": {
                    "en": "Not multiplying all terms by the factored constant."
                  }
                }
              ]
            },
            "EquationsBalanceMethodArrangeTerms": {
              "descr": {
                "en": "Arrange terms with variable to the left and other terms to the right."
              },
              "stepType": "STRATEGY"
            },
            "EquationsOperationsAdd": {
              "descr": {
                "en": "Add or subtract terms using the balance method"
              },
              "stepType": "STRATEGY"
            },
            "AlgebraAddingLikeTerms": {
              "descr": {
                "en": "Adding like terms"
              },
              "stepType": "ALGEBRA"
            },
            "EquationsBalanceMethodDivideCoefficient": {
              "descr": {
                "en": "Divide by the coefficient of the variable to get the solution."
              },
              "stepType": "STRATEGY"
            },
            "EquationsOperationsMultiply": {
              "descr": {
                "en": "Multiply or divide an equation using the balance method"
              },
              "stepType": "STRATEGY"
            }
          },
          "scoring": {
            "finished": false,
            "marksEarned": 0,
            "marksTotal": 1
          }
        }
      },
      "ExerciseValidateRequestExample": {
        "value": {
          "exerciseId": "e6cef2b5-b114-4931-ac68-b77289d7c0a3"
        }
      },
      "ExerciseValidateResponseExample": {
        "value": {
          "success": true,
          "valid": true,
          "marks": 1,
          "random": true,
          "interactions": {
            "Wp0Hr": {
              "type": "MULTISTEP",
              "marks": 1
            }
          }
        }
      },
      "ExerciseInfoRequestExample": {
        "value": {
          "id": "fa42e943-8213-41a6-8a91-8c22a929ffe9"
        }
      },
      "ExerciseInfoResponseExample": {
        "value": {
          "commitHistory": [],
          "id": "fa42e943-8213-41a6-8a91-8c22a929ffe9",
          "endpoint": "https://algebrakit.eu",
          "publishedVersions": [
            {
              "name": "A linear equation",
              "resources": [],
              "metadata": {
                "question-type": "Multistep",
                "creator": "Algebrakit"
              },
              "contentVersion": "11.0",
              "numberOfLevels": 0,
              "interactions": [
                {
                  "block": "Question a",
                  "refId": "lNzHy",
                  "type": "MULTISTEP",
                  "refName": "I1"
                }
              ],
              "majorVersion": "latest"
            }
          ],
          "courseName": "AlgebraKiT-demo",
          "type": "regular exercise"
        }
      }
    }
  }
}