Trộn đề trắc nghiệm API
Đảo câu hỏi và phương án thành N mã đề kèm bảng đáp án, tái lập được bằng seed. Trả về JSON hoặc file zip gồm các đề .docx.
Gửi danh sách câu hỏi trả về từ /v1/vn-quiz-parse (hoặc chính file Word / văn bản đề thi), API tạo versions mã đề, mỗi đề có mã (mã ngẫu nhiên 3 chữ số, code_start=101 để đánh 101, 102… hoặc tự đặt bằng codes), câu hỏi và phương án theo thứ tự mới, ánh xạ về số câu và chữ cái gốc, kèm đáp án. answer_table là bảng đáp án của mọi câu theo từng mã đề, in ra hoặc nạp vào phần mềm chấm được ngay.
Các quy tắc giáo viên cần: câu hỏi chỉ đảo trong phần của nó (PHẦN I, II, III giữ thứ tự, đánh số lại từ đầu mỗi phần nếu đề gốc làm vậy), các câu của cùng một đoạn đọc hiểu đi liền nhau, phương án kiểu "Tất cả đều đúng", "Không có đáp án nào" giữ nguyên vị trí, câu có phương án nhắc tới chữ cái khác ("Cả A và B") giữ nguyên thứ tự phương án. Các ý đúng sai không bị đảo trừ khi shuffle_statements=true. Cùng một seed luôn cho cùng bộ đề, nên có thể dựng lại về sau.
format=docx trả file zip gồm mỗi mã đề một file .docx (tiêu đề có tên trường, tên bài, môn, thời gian và mã đề; giữ ảnh), dap_an.docx (bảng đáp án) và dap_an.csv.
Tham số
| Tên | Vị trí | Kiểu | Bắt buộc | Mặc định | |
|---|---|---|---|---|---|
questions | body | array | không | questions từ /v1/vn-quiz-parse (kèm sections, groups, images nếu có). | |
file | body | file | không | Hoặc đề dạng .docx / văn bản (text), đọc như vn-quiz-parse. | |
versions | body | number | không | 4 | Số mã đề (1–50). |
codes | body | array | không | Mã đề tự đặt, ví dụ ["101","102"] (nếu không: mã ngẫu nhiên 3 chữ số hoặc code_start). | |
code_start | body | number | không | Đánh mã đề liên tiếp từ số này (101, 102…). | |
seed | body | string | không | Seed để tái lập bộ đề (mặc định ngẫu nhiên, có trả về). | |
shuffle_questions | body | boolean | không | true | Đảo câu hỏi trong từng phần. |
shuffle_options | body | boolean | không | true | Đảo phương án A–D. |
format | body|query | string | không | json | json, docx (zip các đề .docx + đáp án) hoặc docx_base64. |
header | body | object | không | Tiêu đề đề thi .docx: school, department, title, subject, time. |
Ví dụ
curl -X POST "https://apibox.io.vn/v1/vn-exam-mix" \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{"text":"Câu 1. Thủ đô của Việt Nam là\nA. TP. Hồ Chí Minh\t*B. Hà Nội\nC. Đà Nẵng\tD. Huế\nCâu 2. 2 + 2 = ?\nA. 3\nB. 4\nC. 5\nD. 6\nĐáp án: B\nLời giải: 2 + 2 = 4.","versions":2,"seed":"demo-2026","code_start":101}'const res = await fetch('https://apibox.io.vn/v1/vn-exam-mix', {
method: 'POST',
headers: {
Authorization: 'Bearer YOUR_API_KEY',
'Content-Type': 'application/json',
},
body: JSON.stringify({
"text": "Câu 1. Thủ đô của Việt Nam là\nA. TP. Hồ Chí Minh\t*B. Hà Nội\nC. Đà Nẵng\tD. Huế\nCâu 2. 2 + 2 = ?\nA. 3\nB. 4\nC. 5\nD. 6\nĐáp án: B\nLời giải: 2 + 2 = 4.",
"versions": 2,
"seed": "demo-2026",
"code_start": 101
}),
});
const data = await res.json();
console.log(data);import requests
res = requests.post(
"https://apibox.io.vn/v1/vn-exam-mix",
headers={"Authorization": "Bearer YOUR_API_KEY"},
json={"text": "Câu 1. Thủ đô của Việt Nam là\nA. TP. Hồ Chí Minh\t*B. Hà Nội\nC. Đà Nẵng\tD. Huế\nCâu 2. 2 + 2 = ?\nA. 3\nB. 4\nC. 5\nD. 6\nĐáp án: B\nLời giải: 2 + 2 = 4.", "versions": 2, "seed": "demo-2026", "code_start": 101},
timeout=30,
)
print(res.json())<?php
$ch = curl_init('https://apibox.io.vn/v1/vn-exam-mix');
curl_setopt_array($ch, [
CURLOPT_RETURNTRANSFER => true,
CURLOPT_CUSTOMREQUEST => 'POST',
CURLOPT_HTTPHEADER => ['Authorization: Bearer YOUR_API_KEY', 'Content-Type: application/json'],
CURLOPT_POSTFIELDS => '{"text":"Câu 1. Thủ đô của Việt Nam là\\nA. TP. Hồ Chí Minh\\t*B. Hà Nội\\nC. Đà Nẵng\\tD. Huế\\nCâu 2. 2 + 2 = ?\\nA. 3\\nB. 4\\nC. 5\\nD. 6\\nĐáp án: B\\nLời giải: 2 + 2 = 4.","versions":2,"seed":"demo-2026","code_start":101}',
]);
$response = curl_exec($ch);
print_r(json_decode($response, true));Kết quả trả về
{
"seed": "demo-2026",
"version_count": 2,
"codes": [
"101",
"102"
],
"question_count": 2,
"settings": {
"shuffle_questions": true,
"shuffle_options": true,
"shuffle_statements": false,
"numbering_restarts_per_part": false
},
"answer_table": [
[
"Câu",
"101",
"102"
],
[
"1",
"D",
"A"
],
[
"2",
"D",
"B"
]
],
"versions": [
{
"code": "101",
"questions": [
{
"number": 1,
"original_number": 1,
"section": 0,
"type": "multiple_choice",
"points": null,
"stem": "Thủ đô của Việt Nam là",
"options": [
{
"label": "A",
"text": "TP. Hồ Chí Minh",
"original_label": "A"
},
{
"label": "B",
"text": "Huế",
"original_label": "D"
},
{
"label": "C",
"text": "Đà Nẵng",
"original_label": "C"
},
{
"label": "D",
"text": "Hà Nội",
"original_label": "B"
}
],
"answer": [
"D"
],
"answer_text": null,
"group": null
},
{
"…": "…"
}
],
"answer_key": "1.D 2.D"
},
{
"code": "102",
"questions": [
{
"…": "…"
}
],
"answer_key": "1.A 2.B"
}
],
"note": "Same seed + same questions + same codes = same versions. Options such as \"Tất cả đều đúng\" keep their position; questions whose options refer to other letters (\"Cả A và B\") keep their option order; reading groups stay together."
}
Ứng dụng
- In nhiều mã đề cho lớp mà không cần phần mềm trộn đề cài máy
- Sinh bảng đáp án cho máy chấm trắc nghiệm hoặc app chấm
- Thi online, mỗi học sinh một đề đã đảo
- Dựng lại bộ đề cũ từ seed khi thất lạc đáp án
Hỏi đáp
Có tạo lại đúng bộ đề cũ được không?
Có. Lưu seed trả về cùng kết quả: cùng seed, cùng câu hỏi và mã đề thì luôn ra cùng bộ đề.
Phương án nào không bị đảo?
Các phương án như "Tất cả đều đúng", "Cả A và B", "Không có phương án nào" giữ nguyên vị trí; nếu phương án nhắc tới chữ cái khác thì cả câu giữ nguyên thứ tự.
File .docx có giữ công thức không?
Giữ nội dung chữ, ảnh và cấu trúc câu hỏi; công thức Word thành chữ thường. Có thể chỉnh lại file sinh ra nếu cần định dạng đặc biệt.
API liên quan
Metadata ảnh & EXIF
Đọc kích thước, định dạng, thông tin EXIF máy ảnh, thông số chụp và vị trí GPS của ảnh JPEG, PNG, WebP, HEIC, AVIF, GIF… – upload file hoặc qua URL.
PDFMetadata PDF
Đọc metadata file PDF: số trang, tiêu đề, tác giả, phần mềm tạo, ngày tạo, phiên bản PDF, mã hoá, số trường form và khổ giấy từng trang (A4, Letter…).
PDF₫Tạo PDF báo giá, phiếu thu
Tạo PDF báo giá, phiếu thu, đơn đặt hàng, hoá đơn bán hàng gọn đẹp từ JSON: tiếng Việt chuẩn, thuế GTGT, số tiền bằng chữ và mã VietQR để thanh toán.