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

Plagiatkontroll API och AI-textdetektor

REST-endpoint för plagiat och AI-detektion. OpenAPI 3.0-spec, Python- och Node-SDK, Apache 2.0-referens. Samma motor som noplag.com. Från första curl till stora volymer med webhooks.

REST · OpenAPI 3.0Python + Node SDKApache 2.0 referensimpl
FÖRSTA ANROPPET

Från noll till en likhetspoäng med en curl.

POST:a text, få tillbaka poängintervall. Ingen SDK krävs, inget kompilationssteg, inget eget wireformat.

FÖRFRÅGAN · bashKopiera
$ 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"    }'
SVAR · 200 OK · application/jsonKopiera
{  "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 }  ]}
ENDPOINTS

Fyra endpoints. Ett kontrakt. Versionshantering i URL:en.

Samma OpenAPI 3.0-specifikation finns både i det open source-baserade repo:t och på engine.noplag.app. SDK:er återskapas från den vid varje taggad release.

POST/v1/checksLämna in en kontrollSynkront upp till 8 s; webhook-återkoppling över det. Idempotensnyckel krävs.
GET/v1/checks/{id}Hämta en kontrollReturnerar senaste rapporten. Streamade intervall med Accept: text/event-stream.
GET/v1/sources/{id}Inspektera källaVisar matchad källa via ID — full URL, ögonblicksdatum, cache eller live.
POST/v1/foldersHantera mapparSkapa / lista / flytta kontroller. Begränsa matchning till privata dokument i vald mapp.
POST/v1/webhooksRegistrera webhookHMAC-signerade aviseringar; exponentiell retry i 24 h; återsänd valfri leverans från dashboard.
Fullständig referens finns på api./docsopenapi.yaml
AUTENTISERING + RATE LIMITS

Bearer-tokens. Idempotensnycklar. Ärliga rate-limit headers.

Inget exotiskt. Standard-HTTP — vi följer det, så er retry-middleware fungerar direkt.

AUTENTISERING

Bearer-tokens. En header, ingen signeringsrutin.

1.
Skapa nyckelDashboard → Inställningar → API. Nycklar kan begränsas (läs / skriv / admin) och roteras med två klick.
2.
Bifoga nyckeln vid varje anropAuthorization: Bearer nplg_live_…. Testnycklar (nplg_test_) använder sandbox och sparar aldrig inskickade jobb.
3.
Lägg till Idempotency-Key på POSTValfri UUID. Samma nyckel + body ger cache-svar i 24 h — ingen dubbeldebitering eller duplicate-kontroll vid retry.
Authorization: Bearer nplg_live_a82f...Idempotency-Key: 0e8f9c44-...
RATE LIMITS

Per nyckel, per minut. Headers visar exakt var ni är.

NIVÅREQ/MINPER MÅNADBURST
Gratis10100 / mån20
Pro601 000 / mån120
Premium30010 000 / mån600
EnterpriseAnpassadFörhandlasAnpassad
X-RateLimit-Limit: 60X-RateLimit-Remaining: 41X-RateLimit-Reset: 1747920480Retry-After: 19  (only on 429)
SDK

Två SDK. Genereras från samma OpenAPI 3.0-spec.

Python och Node levereras vid varje taggad release. Andra språk (Go, Ruby, Java) kan genereras från openapi.yaml — community-PR välkomna.

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-latens
99,95%drifttid SLA
3regioner (US/EU/AP)
OAPI 3specformat
Apache 2.0referensimpl
WEBHOOKS

Långa kontroller ringer upp er. Med retry som inte stör logiken.

01

Fyra eventtyper. JSON-body. HMAC-SHA256-signatur i header.

check.completedRapport klar · hela rapporten som JSON
check.failedPermanent fel · inkluderar felkod + retry-råd
check.progressMellanstatus · hittills lösta källor
folder.sharedMappdelning till kollega eller extern
02

Exponentiella retries i 24 timmar. Kan spelas om från dashboard.

Retry-kurva5s, 30s, 2m, 10m, 1h, 6h, 24h — dead-letter därefter
Timeout10 s connect, 30 s totalt per försök
Lyckad leveransHTTP 2xx-svar i tid; vi följer redirects
Replay UIVälj valfri leverans i dashboard och skicka om till annan URL
03

Kontrollera signaturen. Avvisa allt som inte stämmer.

Varje webhook har X-Noplag-Signature: t=<unix>,v1=<hex>. Beräkna HMAC-SHA256 på timestamp + body med er webhook-nyckel och konstanttidsjämför.

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

Vi följer HTTP. Det är hela API-dokumentet.

Idempotenta POST. Versionsnumret i URL. Felmeddelanden som säger vad som krävs härnäst. Headers visar tydligt vilken rate-limit som gäller. Paginering per cursor, inte offset. Tider i UTC ISO 8601. Ingen egen HATEOAS, vi returnerar inte 200 OK på fel, OAuth krävs inte för server-till-server. API-dokumentet är RFC 9110 och OpenAPI 3.0-spec — det finns inget särskilt “Noplag-sätt”.

Läs designanteckningarna
DESIGNREGLER
IDEMPSamma Idempotency-Key + body inom 24 timmar ger cache-svar. Gör om anrop med samma nyckel vid nätverksfel — ingen dubbeldebitering, inga dubbla kontroller.
VERHuvudversionen i URL (/v1, /v2). Brytande ändring = ny versionsväg. Gammal version stöds 12 månader efter announcement.
ERRRFC 9457-problemdetaljer (JSON) vid varje 4xx/5xx. type, title, detail, instance, plus noplag.retry_strategy.
PAGCursor-baserad på varje list-endpoint. ?limit=100&cursor=... ger next_cursor i svaret. Ingen offset-överraskning på sida 47 vid nyinlagda rader.
OBSSvar innehåller X-Engine-Commit, X-Request-Id, Server-Timing per steg. Kör om vilken kontroll som helst via ID; rapporten länkar till den exakta motorn.
OPENReferensimplementation under Apache 2.0 finns på github.com/NoplagLabs/noplag-engine. Självhosta anropet om din data inte får lämna ditt nätverk — samma API-gränssnitt.
FAQ

Frågor som våra integrationsingenjörer faktiskt ställer.

Vad är svarstiden för ett normalt dokument?
p50 cirka 600 ms för en kontroll av 500 ord mot det indexerade korpuset; p95 cirka 1,8 s. Lägg till cirka 2 s när Layer W (verifiering mot webben i realtid) är aktiverad — då sker en rundresa via Google + Brave. Långa dokument (förväntad bearbetningstid över 8 s) returnerar omedelbart ett check_id och återkopplar via webhook.
Hur mäts och debiteras API-anrop?
En debiterad anrop per POST /v1/checks, oavsett dokumentlängd upp till planens tak (1 500 ord Pro, 50 000 Premium, anpassat Enterprise). Idempotenta omförsök (samma idempotensnyckel + body inom 24 h) dubblar inte debiteringen. /v1/checks/{id}-hämtningar och SDK-helpanrop är gratis.
Kan API:et köras självhostat?
Ja — github.com/NoplagLabs/noplag-engine är samma Apache-2.0-referensimplementation som körs på engine.noplag.app. Med docker compose up får du ett lokalt /v1/checks-endpoint. Molnversionen lägger till det hanterade korpuset samt API-nycklar för Google/Brave; ta med egna nycklar för fullständig self-hosting.
Finns en rate-limit-header som går att lita på?
Vid 429 returneras Retry-After i sekunder. X-RateLimit-*-headers finns på varje svar — ni kan throttla mot X-RateLimit-Remaining i stället för att vänta på 429. Båda är korrekta och stabila över deploys.
Hur ofta släpps nya SDK-versioner?
Python och Node-SDK auto-genereras från openapi.yaml vid varje engine-tag. Huvudreleaser (v0.x → v0.y) ger SDK samma dag. Patchar släpps samma vecka. Båda följer semver; API bryts bara vid /v1 → /v2.
Vad händer om corpus ändras mitt i månaden?
Varje kontroll stämplar X-Engine-Commit och corpus-tidsstämpel. Kör om tidigare kontroll mot nytt corpus med en query-param (?corpus_snapshot=…). Ursprunglig rapport sparas alltid med sin snapshot — vi ändrar aldrig retroaktivt poäng.
Hur testar jag utan att bränna månadsgränsen?
Testnycklar (nplg_test_…) jobbar mot sandbox: hela API-ytan, ingen lagring, inga anrop räknas mot månads- eller ratelimit. Webhooks skjuts från sandbox också, så end-to-end-test är gratis.
Vad är rätt sätt att batcha många kontroller?
Kör parallellt upp till rate-limit. Det finns ingen batch-endpoint — 500 i batch som faller på nr 312 är sämre än 500 självständiga anrop. Vid stora jobb: använd webhooks för att hantera svar. Lämna in, få check_id direkt, gör nästa 200 submissioner, hantera utdata asynkront.
Kan jag begränsa en kontroll till bara mina mappar?
Ja — corpora: [] med folder_id i requesten matchar bara mot egen mapp. Kombinera med corpora: ["academic"] för ”bara akademiskt + egna mappar”. Ingen särskild prisskillnad.
Vad gäller för EU-residens eller on-prem?
Enterprise ger ett dedikerat EU-endpoint (api.eu.noplag.com) med identisk OpenAPI-yta — all data stannar inom EES. Eller självhosta hela referensen i eget VPC — samma motor, samma endpoint, inget lämnar nätet. (Vi relanserar open-core; SOC 2 och liknande är planerade men inte redo — motorn är det vi erbjuder).

Hämta en API-nyckel. Kör ert första anrop.

Gratis test ger 100 API-anrop. Pro-nivå 23 USD/månad för 1 000. Apache 2.0-referens för lokalt bruk inom egen miljö.

Plagiatkontroll API med OpenAPI 3.0 och SDK:er