RESTOpenAPI 3.0-specificatie · Python + Node SDKs · v0.4.2

Plagiaat checker API voor REST en SDK's

Plug-and-play REST-endpoint voor plagiaat + AI-detectie. OpenAPI 3.0-specificatie, Python- en Node-SDKs, Apache 2.0-referentie-implementatie. Vanaf de eerste curl tot aan volumes via webhooks — dezelfde engine als noplag.com.

REST · OpenAPI 3.0Python + Node SDKsApache 2.0-referentie-implementatie
DE EERSTE CALL

Van nul naar een gelijkenisscore met één curl.

POST tekst, ontvang gescoorde intervallen terug. Geen SDK nodig, geen compileerstap, geen eigen wireformat.

REQUEST · bashKopiëren
$ 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/jsonKopiëren
{  "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 }  ]}
DE ENDPOINTS

Vier endpoints. Eén contract. Versies in de URL.

Dezelfde OpenAPI 3.0-specificatie staat zowel in de open-source repository als op engine.noplag.app. SDK’s worden bij elke getagde release opnieuw gegenereerd op basis hiervan.

POST/v1/checksDien een check inSynchroon tot 8s; webhook-callback daarna. Idempotency-Key vereist.
GET/v1/checks/{id}Haal een check opGeeft de laatste rapportstatus terug. Stream intervallen via Accept: text/event-stream.
GET/v1/sources/{id}Bekijk een bronHaalt een gematchte bron op ID op — volledige URL, snapshotdatum, cache of live.
POST/v1/foldersBeheer mappenMaak / lijst / verplaats checks. Corpusmatching per map, alleen op privé documenten.
POST/v1/webhooksRegistreer een webhookHMAC-getekende leveringen; exponentiële retry tot 24u; herlever elke levering vanuit het dashboard.
Volledige documentatie op api./docsopenapi.yaml
AUTH + RATE LIMITS

Bearer-tokens. Idempotency keys. Duidelijke rate-limit headers.

Niets bijzonders. Standaard HTTP-principes — wij volgen ze zodat uw bestaande retry-middleware werkt.

AUTHENTICATIE

Bearer-tokens. Eén header, geen handmatige ondertekening.

1.
Maak een sleutel aanDashboard → Instellingen → API. Sleutels zijn afgebakend (lezen / schrijven / admin) en in twee klikken te wisselen.
2.
Gebruik hem in elke callAuthorization: Bearer nplg_live_…. Testsleutels (nplg_test_) werken alleen op een sandbox en bewaren geen inzendingen.
3.
Voeg Idempotency-Key toe aan POSTsElke UUID werkt. Dezelfde key + body geeft 24u hetzelfde antwoord terug, dus retries veroorzaken geen dubbelen kosten of checks.
Authorization: Bearer nplg_live_a82f...Idempotency-Key: 0e8f9c44-...
RATE LIMITS

Per sleutel, per minuut. Headers laten u precies zien waar u bent.

TIERREQ/MINMAANDELIJKSBURST
Free10100 / maand20
Pro601.000 / maand120
Premium30010.000 / maand600
EnterpriseAangepastOnderhandeldAangepast
X-RateLimit-Limit: 60X-RateLimit-Remaining: 41X-RateLimit-Reset: 1747920480Retry-After: 19  (only on 429)
DE SDKs

Twee SDKs. Gegeneerd uit dezelfde OpenAPI 3.0-specificatie.

Python + Node worden telkens bij een engine-release opnieuw uitgegeven. Andere talen (Go, Ruby, Java) genereren vanuit openapi.yaml — bijdragen welkom.

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-latentie
99,95%uptime SLA
3regio's (VS/EU/AP)
OAPI 3spec-formaat
Apache 2.0referentie-implementatie
WEBHOOKS

Langlopende checks bellen u terug. Met retries die helder blijven.

01

Vier evenementtypes. JSON-body. HMAC-SHA256-handtekening in de header.

check.completedRapport klaar · bevat het volledige rapport als JSON
check.failedPermanente fout · bevat foutcode + retry-advies
check.progressTussentijdse voortgang · tot nu toe gevonden bronnen
folder.sharedToegang tot een map gegeven aan teamlid of externe auditor
02

Exponentiële retries tot 24 uur. Opnieuw af te vuren vanuit het dashboard.

Retry-curve5s, 30s, 2m, 10m, 1u, 6u, 24u — dan dead-letter
Timeout10s verbinden, 30s totaal per poging
SuccescriteriaHTTP 2xx binnen tijdslimiet; we volgen redirects
Replay-UISelecteer elke levering in het dashboard en stuur opnieuw naar een andere URL
03

Controleer de handtekening. Weiger alles wat niet klopt.

Elke levering bevat X-Noplag-Signature: t=<unix>,v1=<hex>. Bereken HMAC-SHA256 over timestamp + body met uw webhook-geheim, vergelijk constant-time.

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

Wij volgen HTTP. Dat is het complete API-document.

Idempotent op POST. Versies in de URL. Fouten uitleggen wat te doen. Headers informeren u precies over de rate-limit. Cursor-paginering, geen offset. Tijdstempels in UTC ISO 8601. Geen eigen HATEOAS-dialect, geen 200 OK bij fouten, geen OAuth-implementatie voor server-to-server calls. Het API-ontwerp is RFC 9110 + OpenAPI 3.0 — geen aparte 'Noplag Manier'.

Lees de ontwerpnotities
ONDERZOEKSBEPERKINGEN
IDEMPZelfde Idempotency-Key + body binnen 24u geeft een gecachte response terug. Retry op netwerkfout met dezelfde key — geen dubbele kosten, geen dubbele check.
VERHoofdversie in de URL (/v1, /v2). Breaking changes komen in een nieuw pad — oude versies worden 12 maanden ondersteund.
ERRRFC 9457 problem-details JSON voor elke 4xx/5xx. type, title, detail, instance, plus een noplag.retry_strategy-hint.
PAGOveral cursor-gebaseerde paginering. ?limit=100&cursor=… levert next_cursor in de body. Geen offset-issues bij invoegen van nieuwe rijen.
OBSRespons bevat X-Engine-Commit, X-Request-Id, en Server-Timing per fase. Speel elke check opnieuw af via ID; rapport linkt naar betreffende engine-release.
OPENReferentie-implementatie onder Apache 2.0 op github.com/NoplagLabs/noplag-engine. Zelf-host de applicatie als je data het netwerk niet mag verlaten — dezelfde API.
FAQ

De vragen van onze integratie-engineers.

Wat is de call-latentie bij een doorsnee document?
p50 rond 600 ms voor een controle van 500 woorden tegen het geïndexeerde corpus; p95 ongeveer 1,8 s. Tel ongeveer 2 s extra als Layer W (live webverificatie) is ingeschakeld — dat maakt een round-trip via Google + Brave. Lange documenten (verwachte verwerkingstijd boven 8 s) krijgen direct een check_id en roepen terug via webhook.
Hoe telt het prijsmodel bij de API?
Eén betaalde call per /v1/checks, ongeacht documentgrootte tot het plan-plafond (1.500 woorden Pro, 50.000 Premium, custom Enterprise). Idempotente retries met dezelfde Idempotency-Key + body binnen 24u tellen niet dubbel. /v1/checks/{id}-reads en SDK-extra-calls zijn gratis.
Kan ik de API zelf hosten?
Ja — github.com/NoplagLabs/noplag-engine is dezelfde Apache-2.0 referentie-implementatie als op engine.noplag.app draait. Met docker compose up krijg je lokaal een /v1/checks-endpoint. De cloudlaag voegt het beheerde corpus en de Google/Brave API-sleutels toe; voor volledig self-host gebruik je je eigen sleutels.
Is er een rate-limit-retry header die ik kan vertrouwen?
Bij 429 krijgt u Retry-After in seconden. X-RateLimit-* headers zitten in elke response — u kunt proactief throttelen op X-RateLimit-Remaining zonder 429 af te wachten. Beide zijn accuraat en stabiel over deploys.
Wat is het SDK-releasepatroon?
Python- en Node-SDKs regenereren automatisch van openapi.yaml bij elk engine-tag. Grote releases (v0.x → v0.y) krijgen dezelfde dag een nieuwe SDK. Patches volgen in dezelfde week. Beide houden semver aan; onderliggende API breekt pas bij /v1 → /v2.
Wat als het corpus halverwege de maand verandert?
Elke check krijgt een X-Engine-Commit en een snapshot-tijdstempel. Herhalen op het laatste corpus kan via een queryparameter (?corpus_snapshot=…). Het originele rapport blijft bij zijn snapshot — we passen scores nooit stilzwijgend aan.
Hoe test ik zonder mijn maandelijkse limiet te verbruiken?
Testsleutels (nplg_test_…) werken in een sandbox: volledige API, geen persistente opslag, nooit meetellen voor limieten of rate-limits. Webhooks draaien ook op de sandbox, integratietesten zijn dus gratis.
Wat is de juiste manier voor bulk-checks?
Voer parallel uit tot uw rate-limit-plafond — er is bewust geen batch-endpoint (een batch van 500 waarbij nummer 312 faalt, is minder wenselijk dan 500 losse calls). Bij hoog volume combineer API met webhooks: indienen, direct check_id terug, doe volgende 200, resultaten asynchroon afhandelen.
Kan ik een check beperken tot mijn eigen mappen?
Ja — corpora: [] met folder_id in de body matcht alleen op privé mappen. Combineer met corpora: ["academic"] voor “alleen academic + mijn mappen”. Per call aan te geven; geen extra billing tier.
Wat wijzigt bij EU-residentie of on-prem setup?
Enterprise-levering regelt een aparte EU-endpoint (api.eu.noplag.com) met hetzelfde OpenAPI-aanzicht, zodat persoonsgegevens in de EER blijven. Of zelf hosten van de referentie in eigen VPC — zelfde engine, zelfde /v1, niets verlaat het netwerk. (We schakelen over naar open-core; formele attesten als SOC 2 staan op de planning, zijn nog niet rond — de engine zelf is nu het aanbod.)

Vraag een API-key aan. Doe uw eerste call.

Gratis proef bevat 100 API-calls. Pro €23/mnd voor 1.000. Apache 2.0-referentie voor lokaal draaien.

Plagiaat checker API voor REST en OpenAPI 3.0