RESTOpenAPI 3.0 spec · Python + Node SDK · v0.4.2

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.

REST · OpenAPI 3.0Python + Node SDKApache 2.0 pavyzdys
PIRMAS KVĖTIMAS

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.

UŽKLAUSA · bashKopijuoti
$ 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"    }'
ATSAKYMAS · 200 OK · application/jsonKopijuoti
{  "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'AI

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.

POST/v1/checksPateikti tikrinimąSinchroninis iki 8 s; po to webhook'as grąžina atsakymą. Idempotency-Key būtinas.
GET/v1/checks/{id}Gauti tikrinimo būsenąGrąžina naujausią ataskaitos būseną. Intervalai srautui per Accept: text/event-stream.
GET/v1/sources/{id}Peržiūrėti šaltinįSuranda atitikimo šaltinį pagal ID — pilnas URL, momentinė data, ar iš podėlio, ar gyvai.
POST/v1/foldersTvarkyti aplankusKurti / peržiūrėti / perkelti tikrinimus. Apriboja atitikimą privataus aplanko dokumentams.
POST/v1/webhooksRegistruoti webhook'ąHMAC pasirašyti siuntimai; eksponentiniai bandymai 24 val.; bet kurią siuntą galima pakartotinai paleisti iš valdymo skydelio.
Pilna dokumentacija: api./docsopenapi.yaml
AUTENTIFIKACIJA + RIBOJIMAI

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ų.

AUTENTIFIKACIJA

Bearer token'ai. Viena antraštė, nėra pasirašymo žingsnių.

1.
Sukurti raktąValdymo skydelis → Nustatymai → API. Raktai turi aprėptį (skaitymas / rašymas / administravimas) ir keičiami dviem paspaudimais.
2.
Pateikti kiekviename kvietimeAuthorization: Bearer nplg_live_…. Testo raktai (nplg_test_) jungia į smėlio dėžę, kuri niekada neišsaugo pateiktų duomenų.
3.
Pridėti Idempotency-Key POST užklausoseTinka bet kuris UUID. Tas pats raktas + turinys per 24 val. grąžina talpyklos atsakymą — kartotinis bandymas nėra apmokestinamas dvigubai ir nedubliuoja tikrinimų.
Authorization: Bearer nplg_live_a82f...Idempotency-Key: 0e8f9c44-...
RIBOJIMAI

Pagal raktą, per minutę. Antraštės rodo tikslią jūsų vietą.

PLANASKV./MINMĖNESINISSPURTAS
Nemokamas10100 / mėn.20
Pro601 000 / mėn.120
Premium30010 000 / mėn.600
EnterprisePasirinktinisDerybosPasirinktinis
X-RateLimit-Limit: 60X-RateLimit-Remaining: 41X-RateLimit-Reset: 1747920480Retry-After: 19  (only on 429)
SDK

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.

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,});
<200msp95 vėlinimas
99.95%prieinamumo SLA
3regionai (JAV/ES/AP)
OAPI 3spec formatas
Apache 2.0pavyzdys
WEBHOOK'AI

Ilgai trunkantys tikrinimai perskambina Jums. Pakartotiniai bandymai, kurie nieko nepraleidžia.

01

Keturi įvykiai. JSON turinys. HMAC-SHA256 parašas antraštėje.

check.completedAtaskaita paruošta · visi duomenys JSON formatu
check.failedNuolatinė klaida · klaidos kodas + rekomendacija
check.progressTarpinė pažanga · šaltiniai išspręsti iki dabar
folder.sharedPrieiga prie aplanko suteikta kolegai ar auditoriui
02

Eksponentiniai bandymai per 24 valandas. Kartoti galima iš valdymo skydelio.

Kartojimo schema5s, 30s, 2m, 10m, 1h, 6h, 24h — po to į archyvą
Timeout10s prisijungimas, 30s visa per bandymą
Sėkmės kriterijaiHTTP 2xx atsakymas per laiką; sekame peradresavimus
Pakartojimo UIPasirinkite pristatymą skydelyje ir persiųskite kitu URL
03

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)
KŪRIMO PRINCIPAI

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 pastabas
PROJEKTAVIMO RIBOJIMAI
IDEMPTas pats Idempotency-Key + turinys per 24 val. grąžina talpyklos atsakymą. Kartokite tinklo klaidos atveju su tuo pačiu raktu — be dvigubo apmokestinimo, be pasikartojančių tikrinimų.
VERPagrindinė versija URL (/v1, /v2). Lūžtančius pakeitimus žymi naujas versijos kelias — senoji versija palaikoma 12 mėn. po paskelbimo.
ERRRFC 9457 problem-details JSON kiekvienai 4xx/5xx. type, title, detail, instance, plius noplag.retry_strategy užuomina.
PAGPagal žymeklį kiekviename sąrašo endpoint'e. ?limit=100&cursor=… grąžina next_cursor atsakyme. Offset netikėtumų puslapyje 47 nėra
OBSAtsakyme yra X-Engine-Commit, X-Request-Id ir Server-Timing per etapą. Kiekvieną tikrinimą galima pakartoti pagal ID; ataskaita siejama su konkrečiu variklio leidimu.
OPENEtaloninė Apache 2.0 licencijos versija pateikta adresu github.com/NoplagLabs/noplag-engine. Jei jūsų duomenys negali išeiti už jūsų tinklo ribų, galite diegti patys — API sąsaja ta pati.
DUK

Klausimai, 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.

Plagiato patikra API – REST, OpenAPI 3.0, SDK