noplagApache 2.0
RESTSpesifikasi OpenAPI 3.0 · SDK Python + Node · v0.4.2

Cek plagiarisme API open-source dan OpenAPI 3.0

REST endpoint langsung untuk cek plagiarisme + deteksi AI. Spesifikasi OpenAPI 3.0, SDK Python dan Node, implementasi referensi Apache 2.0. Mulai dari curl pertama sampai volume berbasis webhook — mesin yang sama digunakan di noplag.com.

REST · OpenAPI 3.0SDK Python + NodeImplementasi referensi Apache 2.0
PANGGILAN PERTAMA

Dari nol ke skor kemiripan dengan satu curl.

POST teks, dapatkan interval skor balik. Tidak perlu SDK, tidak perlu kompilasi, bukan format wire proprietary.

REQUEST · bashSalin
$ 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"    }'
RESPONSE · 200 OK · application/jsonSalin
{  "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 }  ]}
ENDPOINT

Empat endpoint. Satu kontrak. Versi di URL.

Spesifikasi OpenAPI 3.0 yang sama tersedia di repositori open source dan di engine.noplag.app. SDK akan dibuat ulang dari spesifikasi ini pada setiap rilis yang diberi tag.

POST/v1/checksSubmit cekSinkron hingga 8 detik; di atas itu webhook callback. Idempotency-Key wajib.
GET/v1/checks/{id}Ambil hasil cekMengembalikan status laporan terbaru. Interval stream bisa diakses dengan Accept: text/event-stream.
GET/v1/sources/{id}Inspeksi sumberMencari sumber yang cocok berdasarkan ID — URL lengkap, tanggal snapshot, diambil dari cache atau live.
POST/v1/foldersKelola folderBuat / daftar / pindah cek. Membatasi pencocokan korpus ke dokumen privat per-folder.
POST/v1/webhooksDaftarkan webhookPengiriman ditandatangani HMAC; retry eksponensial 24 jam; bisa replay setiap pengiriman dari dashboard.
Referensi lengkap di api./docsopenapi.yaml
AUTH + RATE LIMIT

Bearer token. Idempotency key. Header rate-limit transparan.

Biasa saja. HTTP standar — kami ikuti supaya middleware retry yang sudah ada bisa jalan.

AUTENTIKASI

Bearer token. Satu header, tanpa repot tanda tangan.

1.
Buat keyDashboard → Settings → API. Key bisa diatur lingkupnya (baca / tulis / admin) dan bisa diputar dalam dua klik.
2.
Sertakan di setiap panggilanAuthorization: Bearer nplg_live_…. Key pengujian (nplg_test_) hanya ke sandbox tanpa menyimpan submission.
3.
Tambah Idempotency-Key pada POSTUUID apa pun boleh. Kombinasi key + body yang sama dalam 24 jam akan mengembalikan response cache, jadi retry aman dari double-charges dan duplikasi cek.
Authorization: Bearer nplg_live_a82f...Idempotency-Key: 0e8f9c44-...
RATE LIMIT

Per-key, per-menit. Header kasih posisi tepat.

TIPEREQ/MENITBULANANBURST
Gratis10100 / bulan20
Pro601.000 / bulan120
Premium30010.000 / bulan600
EnterpriseKustomNegoKustom
X-RateLimit-Limit: 60X-RateLimit-Remaining: 41X-RateLimit-Reset: 1747920480Retry-After: 19  (only on 429)
SDK

Dua SDK. Dibuat dari spesifikasi OpenAPI 3.0 yang sama.

Python + Node rilis setiap tag engine. Bahasa lain (Go, Ruby, Java) bisa dibuat dari openapi.yaml — kontribusi komunitas terbuka.

PYTHONpip install noplag
from noplag import Noplagclient = Noplag(api_key="nplg_live_…")report = client.checks.create(    text="...",    corpora=["web", "academic"],    ai_detection=True,)print(report.similarity_pct)
NODEnpm i @noplag/sdk
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,});
<200mslatensi p95
99,95%uptime SLA
3region (US/EU/AP)
OAPI 3format spesifikasi
Apache 2.0implementasi referensi
WEBHOOK

Cek panjang akan callback. Retry tanpa bikin stres.

01

Empat tipe event. Body JSON. Tanda tangan HMAC-SHA256 di header.

check.completedLaporan siap · menyimpan full report JSON
check.failedGagal permanen · kode error + saran retry
check.progressProgres sementara · sumber yang sudah ditemukan
folder.sharedAkses folder diberikan ke rekan tim atau auditor eksternal
02

Retry eksponensial 24 jam. Bisa replay dari dashboard.

Kurva retry5d, 30d, 2m, 10m, 1j, 6j, 24j — lalu dead-letter
Timeout10d connect, 30d total per percobaan
SuksesRespon HTTP 2xx dalam window; redirect diikuti
Replay UIPilih pengiriman apa saja dari dashboard, replay ke URL lain
03

Periksa tanda tangannya. Tolak jika gagal dihitung.

Setiap pengiriman membawa X-Noplag-Signature: t=<unix>,v1=<hex>. Hitung HMAC-SHA256 pada timestamp + body dengan secret webhook Anda dan compare berdurasi konstan.

h = hmac.new(secret,    f"{t}.{body}".encode(),    hashlib.sha256).hexdigest()assert hmac.compare_digest(h, v1)
PRINSIP DEV

Kami pakai HTTP. Itu dokumen desain API-nya.

POST idempoten. Versi di URL. Error jelas langkah berikutnya. Header info posisi rate-limit. Paginasi pakai cursor, bukan offset. Timestamp UTC ISO 8601. Tidak ada HATEOAS khusus, tidak return 200 OK untuk error, dan tidak wajib OAuth untuk server-to-server. Desain API: RFC 9110 dan spesifikasi OpenAPI 3.0 — tidak perlu belajar 'cara Noplag' khusus.

Baca catatan desain
CONSTRAINTS DESAIN
IDEMPIdempotency-Key + body yang sama dalam 24 jam akan return response cache. Retry dengan key sama tidak kena double-charge dan cek duplikat.
VERVersi mayor di URL (/v1, /v2). Perubahan besar = path baru — versi lama dipertahankan 12 bulan setelah pengumuman.
ERRJSON problem-details RFC 9457 untuk setiap 4xx/5xx. type, title, detail, instance, plus hint noplag.retry_strategy.
PAGCursor di semua endpoint daftar. ?limit=100&cursor=… balas next_cursor di body. Tidak ada offset kacau di halaman 47 kalau baris baru masuk saat iterasi.
OBSResponse mencakup X-Engine-Commit, X-Request-Id, Server-Timing tiap tahap. Replay cek per ID; report terhubung ke rilis engine yang relevan.
OPENImplementasi referensi Apache 2.0 tersedia di github.com/NoplagLabs/noplag-engine. Jalankan secara self-host jika data Anda tidak boleh keluar dari jaringan Anda — API-nya sama.
FAQ

Pertanyaan dari engineer integrasi.

Berapa latensi panggilan untuk dokumen biasa?
p50 sekitar 600ms untuk pemeriksaan 500 kata terhadap korpus terindeks; p95 ~1,8 detik. Tambah ~2 detik jika Layer W (verifikasi web langsung) diaktifkan — proses ini bolak-balik ke Google + Brave. Dokumen panjang (pekerjaan diperkirakan lebih dari 8 detik) langsung mengembalikan check_id dan akan memanggil kembali lewat webhook.
Bagaimana perhitungan tagihan di API?
Satu panggilan ditagih per submission /v1/checks, terlepas dari ukuran dokumen hingga batas kata plan (1.500 kata Pro, 50.000 Premium, kustom Enterprise). Retry idempoten dengan Idempotency-Key + body sama dalam 24 jam tidak terhitung ulang. Baca /v1/checks/{id} dan panggilan bantu SDK gratis.
Bisa self-host API-nya?
Ya — github.com/NoplagLabs/noplag-engine adalah implementasi referensi Apache-2.0 yang sama dengan yang berjalan di engine.noplag.app. docker compose up akan menyediakan endpoint /v1/checks secara lokal. Layanan cloud menambahkan korpus terkelola + API key Google/Brave; untuk self-host penuh, Anda perlu menyediakan sendiri.
Ada header retry rate-limit yang valid?
Di 429 kami return Retry-After detik. Header X-RateLimit-* ada di tiap response — bisa throttle dari X-RateLimit-Remaining tanpa menunggu 429. Dua-duanya valid dan konsisten antar deploy.
Seberapa sering rilis SDK?
SDK Python dan Node dibuat ulang dari openapi.yaml di setiap tag engine. Rilis besar engine (v0.x → v0.y) langsung SDK di hari sama. Patch mingguan. Semver di dua SDK; API utama hanya berubah saat /v1 → /v2.
Apa yang terjadi kalau korpus diganti di tengah bulan?
Setiap cek mencatat X-Engine-Commit dan timestamp snapshot korpus. Replay cek lama terhadap korpus terbaru cukup tambah satu parameter query (?corpus_snapshot=…). Report awal tetap dengan snapshot asli — kami tak pernah ubah skor kemiripan yang sudah dikembalikan sebelumnya.
Bagaimana pengujian tanpa menghabiskan kuota bulanan?
Key pengujian (nplg_test_…) ke sandbox: seluruh permukaan API, tak simpan data, tak dihitung ke kuota bulanan atau rate-limit. Webhook dari sandbox juga, jadi integrasi penuh gratis.
Cara tepat bulk check?
Submit paralel hingga batas rate-limit — tidak ada endpoint batch (500 dokumen batch lalu gagal di dokumen ke-312 lebih buruk daripada 500 panggilan sendiri-sendiri). Pipeline volume tinggi: pasangkan API dan webhook, submit, dapat check_id langsung, lanjut submit berikutnya, tangani hasil out-of-order.
Bisa cek terbatas hanya ke folder saya sendiri?
Bisa — corpora: [] dengan folder_id di body hanya cocokkan ke folder privat pengguna. Gabungkan dengan corpora: ["academic"] untuk "hanya academic + folder saya". Scoping per-panggilan; tidak perlu billing tier terpisah.
Apa efek permintaan EU residency atau setup on-prem?
Tier Enterprise menyediakan endpoint khusus residensi EU (api.eu.noplag.com) dengan permukaan OpenAPI sama; data pribadi tetap di EEA. Atau self-host sepenuhnya di VPC Anda — engine dan kontrak /v1 sama, tak ada data keluar jaringan. (Kami sedang relaunch sebagai open-core; sertifikasi seperti SOC 2 di roadmap, belum tersedia — saat ini kami tawarkan engine dapat diaudit.)

Dapatkan API key. Mulai panggilan pertama.

Uji coba gratis 100 panggilan API. Pro $23/bulan untuk 1.000 panggilan. Implementasi referensi Apache 2.0 jika ingin data tetap di jaringan Anda.

Cek plagiarisme API open-source dan OpenAPI 3.0