Plagiato patikra API – REST ir SDK
REST endpoint plagiato + AI aptikimui. OpenAPI 3.0 specifikacija, Python ir Node SDK, Apache 2.0 pavyzdinė implementacija. Nuo pirmo curl iki webhook'ais pagrįsto srauto — veikia tas pats variklis kaip ir noplag.com.
Nuo nulio iki panašumo balo viename curl.
POST tekstą, gaukite pažymėtus intervalus atgal. SDK nereikia, kompiliavimo žingsnio nėra, nuosavos wire formos nėra.
$ 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 } ]}Keturi endpoint'ai. Viena sutartis. Versijuojama URL.
Ta pati OpenAPI 3.0 specifikacija yra tiek atvirojo kodo repozitorijoje, tiek engine.noplag.app. SDK bibliotekos atnaujinamos pagal ją su kiekvienu pažymėtu leidimu.
Bearer token'ai. Idempotency key. Tikri greičio ribojimo antraštės.
Niekas išskirtinio. Standartinės HTTP schemos — laikomės jų, todėl Jūsų vidinė retry logika veikia be pokyčių.
Bearer token'ai. Viena antraštė, nėra pasirašymo žingsnių.
Authorization: Bearer nplg_live_a82f...Idempotency-Key: 0e8f9c44-...Pagal raktą, per minutę. Antraštės rodo tikslią jūsų vietą.
X-RateLimit-Limit: 60X-RateLimit-Remaining: 41X-RateLimit-Reset: 1747920480Retry-After: 19 (only on 429)Du SDK. Generuojami iš tos pačios OpenAPI 3.0 specifikacijos.
Python + Node įkeliami kiekvieną kartą žyminčio variklio leidimo metu. Kitos kalbos (Go, Ruby, Java) generuojamos iš openapi.yaml — bendruomenės PR laukiami.
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,});Ilgai trunkantys tikrinimai perskambina Jums. Pakartotiniai bandymai, kurie nieko nepraleidžia.
Keturi įvykiai. JSON turinys. HMAC-SHA256 parašas antraštėje.
Eksponentiniai bandymai per 24 valandas. Kartoti galima iš valdymo skydelio.
Patikrinkite parašą. Atmesti viską, kas nesutampa.
Kiekviename siuntime yra X-Noplag-Signature: t=<unix>,v1=<hex>. Skaičiuokite HMAC-SHA256 pagal laiko žymą + turinį su jūsų webhook slaptažodžiu ir palyginkite pastoviu laiku.
h = hmac.new(secret, f"{t}.{body}".encode(), hashlib.sha256).hexdigest()assert hmac.compare_digest(h, v1)Sekame HTTP. Tai visas API projektavimo dokumentas.
Idempotentiškas POST. Versija URL. Klaidos nurodo, ką daryti toliau. Antraštės rodo tikslią vietą ribojimo lange. Paginacija pagal žymeklį, ne offset'ą. Laiko žymos UTC ISO 8601. Neturime HATEOAS dialekto, negrąžiname 200 OK per klaidas, neverčiame naudoti OAuth iš serverio į serverį. API projektavimo dokumentas — RFC 9110 ir OpenAPI 3.0 specifikacija — atskiro „Noplag būdo“ mokytis nereikia.
Skaityti projektavimo pastabasKlausimai, kuriuos iš tikrųjų užduoda programuotojai.
- Kokia įprasto tikrinimo užklausa laiko trukmė?
- p50 apie 600 ms tikrinant 500 žodžių tekstą prieš indeksuotą korpusą; p95 ~1,8 s. Įjungus Layer W (tikrinimą internete realiu laiku), prisideda ~2 s — užklausa siunčiama per Google ir Brave. Ilgiems dokumentams (kai tikėtina trukmė viršija 8 s) iš karto grąžinamas check_id, o rezultatai perduodami per webhook.
- Kaip kainodara susieta su API naudojimu?
- Apie kiekvieną /v1/checks užklausą mokestis nepriklausomai nuo dokumento dydžio iki plano limito (1 500 žodžių Pro, 50 000 Premium, pasirinktinis Enterprise). Kartotiniai bandymai su tuo pačiu Idempotency-Key + turiniu per 24 val. neskaičiuojami du kartus. /v1/checks/{id} užklausos ir SDK pagalbiniai kvietimai nemokami.
- Ar galima api paleisti savarankiškai?
- Taip — github.com/NoplagLabs/noplag-engine yra ta pati Apache-2.0 nuorodinė implementacija, kuri veikia engine.noplag.app. Paleidus docker compose up gaunate vietinį /v1/checks endpointą. Debesies lygmuo prideda valdomą korpusą ir Google/Brave API raktus; pilnam self-host reikės savo raktų.
- Ar yra greičio ribojimo antraštė, kuria galiu pasikliauti?
- 429 atveju grąžiname Retry-After sekundėmis. X-RateLimit-* antraštės kiekviename atsakyme — galite apriboti srautą pagal X-RateLimit-Remaining, nelaukdami 429. Abi antraštės tikslios ir nekinta po atnaujinimų.
- Kada išeina naujos SDK versijos?
- Python ir Node SDK regeneruojamos automatiškai iš openapi.yaml kiekviename variklio leidime. Dideli variklio atnaujinimai (v0.x → v0.y) — SDK tą pačią dieną. Smulkios pataisos — per savaitę. Abi SDK laikosi semver; pagrindinis API keičiasi tik keičiant /v1 į /v2.
- Kas nutinka, pakeitus korpusą mėnesio viduryje?
- Kiekvienas tikrinimas įdeda X-Engine-Commit ir korpuso momentinį laiką. Norėdami paleisti senos ataskaitos tikrinimą pagal naujausią korpusą, pridėkite užklausos parametrą (?corpus_snapshot=…). Originali ataskaita išsaugoma su originaliu korpusu — mes niekada tyliai nepakeičiame anksčiau priskirto panašumo balo.
- Kaip testuoti neišnaudojant mėnesio limito?
- Testo raktai (nplg_test_…) veikia smėlio dėžėje: pilnas API paviršius, niekada nesaugo atsiųstų duomenų ir neskaičiuojami į mėnesinį limitą ar greičio ribojimus. Webhook'ai testuojami smėlio dėžėje taip pat, tad galimi ir pilni testai.
- Kaip teisingai atlikti masinį tikrinimą?
- Siųskite užklausas lygiagrečiai iki Jūsų limito — batch endpoint'o tyčia nėra (500 dokumentų grupė, sugedusi ties 312, blogiau nei 500 atskirų kvietimų). Dideliems kiekiams naudokite API su webhook'ais: pateikite, gaukite check_id iškart, siųskite kitus 200, rezultatus apdorokite iš eilės.
- Ar galiu tikrinti tik savo aplankus?
- Taip — corpora: [] su folder_id užklausos kūne tikrina tik vartotojo privačius dokumentus. Kombinuokite su corpora: ["academic"], jei reikia “tik akademinių + mano aplankuose”. Nereikia atskiro plano.
- Kas pasikeičia dėl ES rezidencijos ar lokalios instaliacijos?
- Enterprise planas suteikia dedikuotą ES rezidencijos endpoint'ą (api.eu.noplag.com) su ta pačia OpenAPI sąsaja — asmeniniai duomenys lieka EEE. Arba paleiskite visą pavyzdinį variklį savo VPC — tas pats variklis, tas pats /v1 kontraktas, niekas neišeina už tinklo. (Persiorientuojame į open-core modelį; formalūs auditai kaip SOC 2 planuojami, bet dar nėra — vietoje jų siūlome audituojamą variklį.)
Gaukite API raktą. Padarykite pirmą užklausą.
Nemokama versija apima 100 API kvietimų. Pro planas $23/mėn už 1 000. Apache 2.0 pavyzdinė implementacija, jei norite viską laikyti savo tinkle.