Kiểm tra đạo văn API cho tích hợp nhanh
REST endpoint cắm sẵn cho kiểm tra đạo văn + phát hiện AI. OpenAPI 3.0, SDK Python và Node, bản tham khảo Apache 2.0. Từ lệnh curl đầu tiên cho đến webhook khối lượng lớn — cùng engine như noplag.com dùng.
Từ số 0 đến điểm tương đồng chỉ với một lệnh curl.
POST văn bản, trả về từng đoạn được đánh giá. Không cần SDK, không cần biên dịch, không có định dạng dây chuyền độc quyền.
$ curl https://engine.noplag.app/v1/checks \ -H "Authorization: Bearer $NOPLAG_KEY" \ -H "Content-Type: application/json" \ -H "Idempotency-Key: $(uuidgen)" \ -d '{ "text": "The rain in Spain falls...", "corpora": ["web", "academic"], "ai_detection": true, "webhook_url": "https://you.example/hook" }'{ "check_id": "chk_01HX9R2Y4...", "status": "complete", "similarity_pct": 23.4, "ai_score": 0.08, "engine_commit": "v0.4.2", "sources": [ { "url": "https://en.wikipedia...", "matched_chars": 142, "similarity_pct": 100.0 } ]}Bốn endpoint. Một cam kết. Phiên bản trong URL.
Cùng một đặc tả OpenAPI 3.0 được lưu trữ trong kho mã nguồn mở và trên engine.noplag.app. Các SDK được tạo lại từ đặc tả này mỗi khi có bản phát hành được gắn thẻ.
Token Bearer. Idempotency key. Header giới hạn tốc độ minh bạch.
Không có gì lạ. Tuân thủ chuẩn HTTP — phép thử lại sẵn có vẫn dùng được.
Token Bearer. Một header, không ký nhiều bước.
Authorization: Bearer nplg_live_a82f...Idempotency-Key: 0e8f9c44-...Theo khoá, mỗi phút. Header cho biết tình trạng thực tế.
X-RateLimit-Limit: 60X-RateLimit-Remaining: 41X-RateLimit-Reset: 1747920480Retry-After: 19 (only on 429)Hai SDK. Sinh từ cùng một spec OpenAPI 3.0.
Python + Node phát hành mỗi lần engine gắn thẻ. Ngôn ngữ khác (Go, Ruby, Java) sinh từ openapi.yaml — chào đón PR cộng đồng.
from noplag import Noplagclient = Noplag(api_key="nplg_live_…")report = client.checks.create( text="...", corpora=["web", "academic"], ai_detection=True,)print(report.similarity_pct)import Noplag from "@noplag/sdk";const client = new Noplag({ apiKey: process.env.NOPLAG_KEY,});const report = await client.checks.create({ text: "...", corpora: ["web", "academic"], aiDetection: true,});Kiểm tra lâu sẽ gọi lại bạn. Có retry không lo failed.
Bốn loại sự kiện. JSON body. HMAC-SHA256 ký trong header.
Retry bậc thang trong 24 giờ. Gửi lại từ dashboard dễ dàng.
Kiểm tra chữ ký. Loại thẳng cái gì sai.
Mọi lần giao hàng đều có X-Noplag-Signature: t=<unix>,v1=<hex>. Tính HMAC-SHA256 trên timestamp + body với bí mật webhook, so sánh hằng thời gian.
h = hmac.new(secret, f"{t}.{body}".encode(), hashlib.sha256).hexdigest()assert hmac.compare_digest(h, v1)Chúng tôi tuân thủ HTTP. Đó là toàn bộ tài liệu thiết kế API.
POST là idempotent. Phiên bản trong URL. Lỗi nói rõ cách xử lý tiếp. Header minh bạch về giới hạn tốc độ. Phân trang bằng con trỏ, không offset. Thời gian UTC ISO 8601. Không tự chế HATEOAS, không trả 200 OK với lỗi, không ép dùng OAuth cho máy chủ gọi nhau. Tài liệu thiết kế API là RFC 9110 và đặc tả OpenAPI 3.0 — không có “cách riêng Noplag” nào thêm.
Xem ghi chú thiết kếCâu hỏi thực tế nhóm tích hợp kỹ thuật đặt ra.
- Độ trễ gọi cho tài liệu điển hình là bao lâu?
- p50 khoảng 600ms cho một lần kiểm tra 500 từ với corpus đã được lập chỉ mục; p95 khoảng 1,8 giây. Thêm khoảng 2 giây nếu bật Layer W (xác minh trực tiếp trên web) — thao tác này sẽ gửi yêu cầu qua Google + Brave. Tài liệu dài (dự kiến xử lý trên 8 giây) sẽ trả về check_id ngay lập tức và phản hồi qua webhook.
- Phí API tính như nào?
- Mỗi lần POST /v1/checks bị tính phí một lần, không phân biệt số từ, miễn dưới hạn từng gói (1.500 từ Pro, 50.000 Premium, Enterprise tuỳ chỉnh). Thử lại idempotent cùng khoá + nội dung trong 24h không bị tính lại. Lấy kết quả /v1/checks/{id} và gọi phụ trợ SDK là miễn phí.
- Tôi có tự host API được không?
- Có — github.com/NoplagLabs/noplag-engine là bản tham chiếu Apache-2.0 giống với bản chạy tại engine.noplag.app. docker compose up sẽ cung cấp endpoint /v1/checks cục bộ. Phiên bản cloud bổ sung corpus được quản lý và API key Google/Brave; để tự triển khai hoàn toàn, bạn cần tự cung cấp các khóa này.
- Có header thử lại rate-limit đáng tin không?
- Gặp 429 chúng tôi trả Retry-After tính bằng giây. Header X-RateLimit-* đi kèm mọi phản hồi — có thể chủ động giảm tải dựa trên X-RateLimit-Remaining, không nhất thiết phải đợi 429. Cả hai đều chính xác, ổn định giữa các bản triển khai.
- Chu kỳ phát hành SDK như thế nào?
- SDK Python và Node tự đồng bộ từ openapi.yaml mỗi lần engine gắn thẻ. Bản engine lớn (v0.x → v0.y) có SDK cùng ngày. Sửa lỗi nhỏ ra trong tuần. SDK đều theo semver; API chỉ thay đổi lớn khi /v1 → /v2.
- Corpus thay đổi giữa tháng thì kiểm tra thế nào?
- Mỗi kiểm tra đóng dấu X-Engine-Commit và mốc thời gian corpus. Kiểm lại với corpus mới chỉ cần thêm ?corpus_snapshot=… vào truy vấn. Báo cáo gốc giữ nguyên snapshot — không âm thầm sửa lại điểm tương đồng đã trả trước đó.
- Làm sao thử API mà không tốn thêm quota tháng?
- Khoá thử nghiệm (nplg_test_…) trỏ vào sandbox: đủ API, không lưu kết quả, không tính giới hạn tháng/rate. Webhook kích hoạt cả từ sandbox, kiểm thử đầu-cuối cũng không tốn quota.
- Cách kiểm tra hàng loạt thế nào là đúng?
- Gửi song song đến giới hạn tốc độ — có chủ ý không có endpoint batch (gửi 1 lô 500 mà lỗi ở tài liệu 312 còn tệ hơn 500 lần lẻ). Dòng lớn thì ghép webhook: gửi, nhận lại check_id ngay, gửi tiếp 200 cái nữa, xử lý kết quả ngẫu nhiên tới.
- Có thể giới hạn kiểm tra cho riêng thư mục của tôi không?
- Có — corpora: [] kèm folder_id trong payload sẽ chỉ kiểm tra các thư mục riêng. Có thể kết hợp corpora: ["academic"] để giới hạn cho “học thuật + thư mục riêng”. Giới hạn theo từng lệnh; không phải gói riêng.
- Yêu cầu lưu trữ EU hoặc cài on-prem, cần lưu ý gì?
- Enterprise có endpoint riêng EU (api.eu.noplag.com) cùng giao diện OpenAPI, đảm bảo dữ liệu cá nhân ở lại EEA. Hoặc tự host bản tham khảo hoàn toàn trong VPC — cùng engine, cùng hợp đồng /v1, không rời khỏi mạng. (Chúng tôi đang chuyển mô hình open-core; các chứng nhận như SOC 2 còn trên lộ trình chứ chưa phát hành — tạm thời chỉ có engine audit.)
Lấy API key. Thực hiện lệnh đầu tiên.
Dùng thử miễn phí 100 lượt API. Tầng Pro $23/tháng cho 1.000 lượt. Có bản Apache 2.0 tham khảo nếu cần giữ tất cả nội bộ.