RESTOpenAPI 3.0 specifikācija · Python + Node SDK · v0.4.2

Plaģiāta pārbaude API ar OpenAPI 3.0

REST gals plagiātisma un AI noteikšanai. OpenAPI 3.0 specifikācija, Python un Node SDK, Apache 2.0 piemērs. Sākot no pirmā curl līdz webhuku apjomiem — tas pats dzinējs, kas darbojas noplag.com.

REST · OpenAPI 3.0Python + Node SDKApache 2.0 piemērs
PIRMĀ IZSAUKŠANA

No nulles līdz līdzības rādītājam ar vienu curl.

POST teksts, saņem intervālus ar rādītājiem. SDK nav vajadzīgs, nav kompilācijas, nav īpašas datu plūsmas.

PIETEIKUMS · bashKopēt
$ 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"    }'
ATBILDE · 200 OK · application/jsonKopēt
{  "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 }  ]}
GALAPUNKTI

Četri galapunkti. Viens līgums. Versija URL.

Tā pati OpenAPI 3.0 specifikācija ir pieejama gan atvērtā pirmkoda repozitorijā, gan vietnē engine.noplag.app. SDK tiek ģenerēti no šīs specifikācijas katrā iezīmētajā laidienā.

POST/v1/checksIesniegt pārbaudiSinhrons līdz 8 s; ilgāk — webhuka atbilde. Nepieciešama Idempotency-Key.
GET/v1/checks/{id}Iegūt pārbaudiAtgriež jaunāko atskaites stāvokli. Intervālus var saņemt caur Accept: text/event-stream.
GET/v1/sources/{id}Apskatīt avotuAtrisināt atbilstošo avotu pēc ID — pilns URL, momentuzņēmuma datums, kešatmiņā vai tiešsaistē.
POST/v1/foldersPārvaldīt mapesIzveidot / uzskaitīt / pārvietot pārbaudes. Salīdzina tikai privātos dokumentus katrā mapē.
POST/v1/webhooksReģistrēt webhukuHMAC-parakstītas piegādes; eksponenciāli atkārtojumi 24h laikā; iespējams atkārtot no paneļa.
Pilna dokumentācija pieejama api./docsopenapi.yaml
AUTENTIFIKĀCIJA + LIMITI

Bearer tokeni. Idempotences atslēgas. Godīgi limiti galvenēs.

Nekā īpaša. Standarta HTTP pieejas — ievērojam tās, lai Jūsu esošā atkārtojumu starpprogrammatūra darbotos.

AUTENTIFIKĀCIJA

Bearer tokeni. Viena galvene, nav papildus darbību.

1.
Izveidot atslēguPanelis → Iestatījumi → API. Atslēgas ir ar piekļuves līmeni (lasīt / rakstīt / admin) un nomaināmas divos klikšķos.
2.
Pievienojiet to katram pieprasījumamAuthorization: Bearer nplg_live_…. Testa atslēgas (nplg_test_) darbojas smilšu kastē — iesniegumi netiek saglabāti.
3.
Pievienojiet Idempotency-Key POST pieprasījumosDer jebkurš UUID. Vienāda atslēga + ķermenis 24 h laikā atgriež kešāto atbildi — nebūs dubultmaksa vai dubultpārbaudes.
Authorization: Bearer nplg_live_a82f...Idempotency-Key: 0e8f9c44-...
IZSAUKUMU LIMITI

Uz atslēgu, minūtē. Galvenes precīzi rāda Jūsu stāvokli.

LIMENISPIEPR./MINMENESĪPIEPLŪDE
Bezmaksas10100 / mēn20
Pro601 000 / mēn120
Premium30010 000 / mēn600
EnterprisePielāgotsVienojotiesPielāgots
X-RateLimit-Limit: 60X-RateLimit-Remaining: 41X-RateLimit-Reset: 1747920480Retry-After: 19  (only on 429)
SDK

Divi SDK. Abi ģenerēti no vienas OpenAPI 3.0 specifikācijas.

Python + Node SDK pie katra dzinēja marķētā laidiena. Citas valodas (Go, Ruby, Java) ģenerējamas no openapi.yaml — aicinām PR no kopienas.

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 latentums
99,95%uptime SLA
3reģioni (US/EU/AP)
OAPI 3spec formāts
Apache 2.0piemērs
WEBHUKI

Ilgi darbojošās pārbaudes atzvana Jūs. Atkārtojumi, kas saglabā pilnu vēsturi.

01

Četri notikumu tipi. JSON struktūra. HMAC-SHA256 paraksts galvenē.

check.completedAtskaites gatava · JSON pilns atskaites teksts
check.failedNeatgriezeniska kļūda · kļūdas kods + padoms par atkārtojumu
check.progressStarpstāvis progress · līdz šim atrastie avoti
folder.sharedMapes piekļuve piešķirta komandas biedram vai ārējam revidentam
02

Eksponenciāli atkārtojumi 24 stundas. Var atkārtot no paneļa.

Atkārtojumu intervāli5s, 30s, 2m, 10m, 1h, 6h, 24h — tad dead-letter
Timeout10s savienojums, 30s katram mēģinājumam
Veiksmes kritērijiHTTP 2xx atbilde logā; sekojam pāradresācijām
Atkārtošanas UIIzvēlieties jebkuru piegādi no paneļa un nosūtiet uz citu URL
03

Pārbaudiet parakstu. Nesaņemtais tiek noraidīts.

Katra piegāde nes X-Noplag-Signature: t=<unix>,v1=<hex>. Aprēķiniet HMAC-SHA256 pār timestamp + body ar savu noslēpumu un salīdziniet konstantā laikā.

h = hmac.new(secret,    f"{t}.{body}".encode(),    hashlib.sha256).hexdigest()assert hmac.compare_digest(h, v1)
IZSTRĀDES PRINCIPI

Balstāmies uz HTTP. Tas ir viss API dizaina dokuments.

POST darbības — idempotentes. Versija URL. Kļūdas paskaidro nākamo soli. Galvenes precīzi rāda Jūsu stāvokli limitlogā. Paginācija — ar kursoru, nevis kārtas numuru. Laika zīmogi UTC ISO 8601. Mums nav savas HATEOAS valodas, neatgriežam 200 OK kļūdai un neprasām OAuth serveru savstarpējiem zvaniem. API dizains — RFC 9110 un OpenAPI 3.0 specifikācija. Nav atsevišķa “Noplag veida”, ko būtu jāapgūst.

Lasīt dizaina piezīmes
DIZAINA IEROBEŽOJUMI
IDEMPVienāda Idempotency-Key + ķermenis 24h laikā atgriež kešatbildi. Tīkls kļūdas gadījumā vēlreiz ar to pašu atslēgu — nebūs dubultmaksa, nebūs dublēšanās.
VERGalvenā versija URL (/v1, /v2). Pārmaiņas ar saderības zudumu — jauns ceļš; vecā versija uzturēta 12 mēnešus pēc paziņojuma.
ERRRFC 9457 problem-details JSON jebkuram 4xx/5xx. type, title, detail, instance, plus noplag.retry_strategy ieteikums.
PAGKatrā saraksta galapunktā — kursorbāzēta. ?limit=100&cursor=… atgriež next_cursor atbildē. Nav offset kļūdu 47. lapā, kad starplaikā parādās jauni ieraksti.
OBSAtbilde iekļauj X-Engine-Commit, X-Request-Id, Server-Timing pa soļiem. Var atkārtot jebkuru pārbaudi pēc ID; atskaite satur saiti uz konkrētu dzinēja versiju.
OPENAtsauces implementācija Apache 2.0 pieejama github.com/NoplagLabs/noplag-engine. Ja dati nedrīkst pamest jūsu tīklu, varat izvietot paši — API virsma tāda pati.
JAUTĀJUMI

Jautājumi, ko uzdod mūsu integrācijas inženieri.

Kāda ir zvana aizture tipiskam dokumentam?
p50 ap 600 ms, pārbaudot 500 vārdus pret indeksēto korpusu; p95 ~1,8 s. Ja ieslēgts Layer-W (tiešsaistes pārbaude tīmeklī), pievienojas ~2 s — tas notiek caur Google un Brave. Garākiem dokumentiem (ja sagaidāms darbs virs 8 s) uzreiz tiek atgriezts check_id, un rezultāts tiek nosūtīts ar webhook.
Kā tiek rēķināta maksa par API?
Viens maksas zvans uz katru /v1/checks iesniegumu — neatkarīgi no dokumenta apjoma, līdz plāna vārdskaitam (1 500 Pro, 50 000 Premium, pielāgots Enterprise). Idempotenti atkārtojumi ar to pašu atslēgu + ķermeni 24h laikā netiek dubultskaitīti. /v1/checks/{id} lasīšana un SDK palīgzvani — bez maksas.
Vai es varu darbināt API lokāli?
Jā — github.com/NoplagLabs/noplag-engine ir tā pati Apache-2.0 atsauces implementācija, kas darbojas engine.noplag.app. Ar docker compose up var palaist lokālu /v1/checks galapunktu. Mākoņpakalpojuma līmenī pieejams pārvaldītais korpuss un Google/Brave API atslēgas; pilnai pašuzturēšanai savas atslēgas jānodrošina pašam.
Vai ir rate-limit atkārtojuma galvene, kurai varu uzticēties?
Pie 429 atgriežam Retry-After sekundēs. X-RateLimit-* galvenes iet katrā atbildē — varat ierobežot pēc X-RateLimit-Remaining, negaidot 429. Abi pareizi, abi stabili caur laidieniem.
Kāda ir SDK atjauninājumu biežums?
Python un Node SDK tiek pārģenerēti no openapi.yaml pie katra dzinēja marķējuma. Galvenie dzinēja laidieni (v0.x → v0.y) saņem SDK versiju tajā pašā dienā. Kļūdu labojumi iznāk nedēļas laikā. Abi SDK ievēro semver; API virsma mainās tikai /v1 → /v2.
Kas notiek, ja korpuss mainās mēneša laikā?
Katra pārbaude satur X-Engine-Commit un korpusa momentuzņēmuma laiku. Vecas pārbaudes atkārtota veikšana pret jaunāko korpusu — viens query parameters (?corpus_snapshot=…). Oriģinālā atskaite saglabājas ar savu momentuzņēmumu — mēs nekad nemainām iepriekš atgrieztu līdzības rādītāju bez atsevišķa pieprasījuma.
Kā izmantot testa režīmu, nebojājot savu mēneša kvotu?
Testa atslēgas (nplg_test_…) darbojas smilšu kastē: pilna API virsma, nekas netiek saglabāts, nekaitina limitu vai kvotu. Webhuki arī darbojas testā — integrācijas testi ir bez maksas.
Kā pareizi veikt masveida pārbaudes?
Sūtiet paralēli līdz sava limita griestam — nav grupas gala punkta pēc dizaina (500 dokumentu batch, kur 312. dokuments izgāžas, nav labāk kā 500 neatkarīgu zvanu). Liela apjoma gadījumā — kombinējiet API ar webhuku: iesniedziet, uzreiz saņemat check_id, turpiniet nākamos 200 dokumentus, apstrādājiet atbildes pēc to saņemšanas, neatkarīgi no kārtas.
Vai varu pārbaudīt tikai savas mapes?
Jā — corpora: [] ar folder_id pieprasījumā salīdzina tikai pret privātajām mapēm. Kombinējiet ar corpora: ["academic"], lai pārbaudītu tikai akadēmiskos + savu mapi. Katram pieprasījumam atsevišķi; papildu maksas nav.
Kas mainās, ja vajag ES rezidenci vai lokālu izpildi?
Enterprise līmenis nodrošina atsevišķu EU-endpoint (api.eu.noplag.com) ar to pašu OpenAPI saskarni — personas dati paliek EEA. Vai arī — palaidiet pilnu piemēra ieviešanu savā VPC — tas pats dzinējs, tas pats /v1 līgums, nekas netiek pārsūtīts ārpus tīkla. (Atjaunojam uz open-core uzņēmumu; formālas atbilstības, piemēram, SOC 2, ir plānā, bet vēl nav. Piedāvājam auditu iespējamu dzinēju kā pagaidu variantu.)

Iegūstiet API atslēgu. Veiciet savu pirmo zvanu.

Bezmaksas izmēģinājums — 100 API zvani. Pro — 23 $/mēn par 1 000. Apache 2.0 piemērs, ja nevēlaties izsaukt ārpus sava tīkla.

Plaģiāta pārbaude API ar OpenAPI 3.0 un SDK