{"name":"TikZ Render API","endpoints":["POST /render - multipart/form-data, returns image/png","POST /render/base64 - multipart/form-data, returns JSON with base64 PNG","GET /swagger - Swagger UI","GET /swagger/v1/swagger.json - OpenAPI document","POST /grading/run - JSON (dryrunID, questionID, maxConcurrency, limit, provider, model), starts a grading job","POST /grading/rotateImage - JSON (imageUrl, provider, model), detects and returns only the clockwise correction angle","POST /grading/runQuestion - JSON dynamic query/update mappings, starts a persisted question grading task","POST /grading/runQuestion2 - JSON dynamic query/update mappings, starts a two-model-call local-rendering grading task","POST /grading/runPro - JSON (dryrunID, questionID, maxConcurrency, limit, provider, model), starts a pro grading job","POST /grading/preview - JSON (dryrunID, questionID, provider, model), returns a grading preview PNG without writing data","POST /grading/previewPro - JSON (dryrunID, questionID, provider, model), returns a pro grading preview PNG without writing data","GET /grading/jobs/{jobId} - returns grading job progress and item results","POST /GetLatax - multipart/form-data, converts an image with a request prompt and writes question_convert_log","POST /FormatLetax - multipart/form-data, formats LaTeX/text with a request prompt and writes question_convert_log","POST /math_format - multipart/form-data, formats a question with the built-in math_format skill","POST /GetLatax/TextImage - multipart/form-data, converts image and/or text with a request prompt and writes question_convert_log","POST /xiaomi/TextImage - multipart/form-data, converts image and/or text with xiaomimimo OpenAI-compatible API","POST /xiaomi/audio/transcribekey - form data, transcribes Voice directly or loads it by Key and writes VoiceText","POST /question/link - tags every question in a book with subject, form type and chapter","POST /book/Setlink - tags every question in a book for one property dimension","POST /deepseek/TextImage - multipart/form-data, converts image and/or text with DeepSeek OpenAI-compatible API","POST /convert/image-url - multipart/form-data, converts an image URL to formatted text and TikZ","POST /search/photo-question - multipart/form-data, searches question_list by uploaded question photo","POST /api/base/searchphoto - multipart/form-data, searches the independent photo_question_search index","POST /api/base/searchphoto/sync - multipart/form-data, copies question_list searchable fields to photo_question_search","POST /api/base/searchphoto/initialize - multipart/form-data, initializes only missing question_list IDs into photo_question_search","POST /qa/math-tutor - multipart/form-data, answers postgraduate math questions with an image","POST /ai/helpdesk/answer - form data, generates and saves a GPT helpdesk answer","POST /ai/helpdesk/answerPreview - form data, generates and logs a GPT helpdesk answer preview","POST /ai/helpdesk/summary - form data, summarizes a helpdesk dialog and updates the problem","POST /ai/helpdesk/summaryMultiple - form data (QAKeys, max 10000), creates a background summary task","GET /ai/helpdesk/summaryMultiple/tasks/{taskId} - returns background summary task state and progress","POST /helpdeskuser/QAcount - form data (StuID, QAKey), decrements helpdesk QA balance and writes helpdesk_user_log","POST /pdf-exam/questions - multipart/form-data (pdf, system_station_id), asynchronously detects question bounds and saves screenshots; LaTeX OCR is currently disabled","GET /pdf-exam/jobs/{jobId} - query asynchronous PDF exam recognition status and result","GET /pdf-exam-app - browser UI for uploading PDFs and reviewing question screenshots","POST /pdf-exam/latex - asynchronously converts a PDF exam to structured LaTeX questions","GET /pdf-exam/latex/jobs/{jobId} - query PDF-to-LaTeX task status and result","GET /pdf-exam/latex/jobs/{jobId}/questions - return parsed LaTeX questions when complete","POST /convert/answer-image - multipart/form-data, converts AnswerImg by questionId and writes question_files as 题目详解","POST /convert/book - multipart/form-data, converts QuestionImg and AnswerImg by BookID and writes question_files","POST /convert/bookPro - multipart/form-data, converts QuestionImg to QuestionLeTex and AnswerImg to question_files","POST /convert/BookAnswerPro - multipart/form-data, writes analysis from QuestionTxt and question_files","POST /convert/book/Question - multipart/form-data, converts QuestionImg only by BookID and writes question_files","POST /convert/book/QuestionPro - multipart/form-data, converts QuestionImg only by BookID with 30-way parallelism and writes question_files","POST /convert/book/Answer - multipart/form-data, converts AnswerImg only by BookID and writes question_files","POST /convert/book/AnswerPro - multipart/form-data, converts AnswerImg only by BookID with 30-way parallelism and writes question_files","POST /convert/step-by-step - multipart/form-data, creates non-skipping analysis by questionId","GET /question-files - list question_files rows","GET /question-files/{id} - get one question_files row","POST /question-files - multipart/form-data, create one question_files row","PUT /question-files/{id} - multipart/form-data, update one question_files row","DELETE /question-files/{id} - delete one question_files row","DELETE /question-convert-logs/by-question/{questionId} - delete question_convert_log rows by questionId","GET /scheduler/tasks - list scheduler tasks","POST /scheduler/tasks - multipart/form-data, create scheduler task","PUT /scheduler/tasks/{id} - multipart/form-data, update scheduler task","DELETE /scheduler/tasks/{id} - delete scheduler task","GET /scheduler/logs - list scheduler logs","POST /scheduler/run/{id} - run scheduler task manually"],"sample":{"contentType":"multipart/form-data","tikz":"\\begin{tikzpicture}\\draw[->] (0,0) -- (2,0);\\end{tikzpicture}","dpi":200,"fontSize":6}}