Antiplagio API REST e OpenAPI 3.0
REST endpoint immediato per rilevare plagio e AI. Specifica OpenAPI 3.0, SDK Python e Node, implementazione di riferimento Apache 2.0. Dal primo curl al volume via webhook — stesso motore che gira su noplag.com.
Da zero a uno score di similarità con un curl.
POST del testo, ritorno degli intervalli valutati. Nessun SDK richiesto, nessuna compilazione, nessun formato wire proprietario.
$ 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 } ]}Quattro endpoint. Un unico contratto. Versionamento nell’URL.
La stessa specifica OpenAPI 3.0 è presente sia nel repository open source sia su engine.noplag.app. Gli SDK vengono rigenerati da essa a ogni release contrassegnata.
Token Bearer. Idempotency Key. Header rate-limit trasparenti.
Nulla di esotico. Pattern HTTP standard — li seguiamo in modo che il Suo middleware di retry già funzioni.
Token Bearer. Un header, senza complessità di firma.
Authorization: Bearer nplg_live_a82f...Idempotency-Key: 0e8f9c44-...Per chiave, per minuto. Gli header dicono lo stato.
X-RateLimit-Limit: 60X-RateLimit-Remaining: 41X-RateLimit-Reset: 1747920480Retry-After: 19 (only on 429)Due SDK. Generati dalla stessa specifica OpenAPI 3.0.
Python e Node sono disponibili ogni volta che esce una release engine etichettata. Altri linguaggi (Go, Ruby, Java) si generano da openapi.yaml — PR dalla community benvenute.
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,});Check lunghi richiamano di ritorno. Retry gestibili.
Quattro eventi. Corpo JSON. Firma HMAC-SHA256 nell’header.
Retry esponenziale per 24 ore. Ogni invio ripetibile dalla dashboard.
Verifichi la firma. Rifiuti tutto ciò che non coincide.
Ogni invio porta X-Noplag-Signature: t=<unix>,v1=<hex>. Calcoli HMAC-SHA256 su timestamp + body con il Suo secret per il webhook e compari a tempo costante.
h = hmac.new(secret, f"{t}.{body}".encode(), hashlib.sha256).hexdigest()assert hmac.compare_digest(h, v1)Seguiamo HTTP. È tutto il documento di design API.
POST idempotenti. Versionamento nell’URL. Errori che dicono come agire. Header rate-limit espliciti. Paginazione via cursore, non offset. Timestamp UTC ISO 8601. Nessun dialetto HATEOAS custom, nessuna 200 OK su errore, nessun obbligo OAuth per chiamate server-server. Design API = RFC 9110 + OpenAPI 3.0 — non c’è niente tipo “Noplag Way” da imparare.
Legga le note di designLe domande realmente poste dagli integratori.
- Qual è la latenza tipica di una chiamata?
- p50 circa 600 ms per un controllo di 500 parole sul corpus indicizzato; p95 circa 1,8 s. Aggiungi circa 2 s se Layer W (verifica web in tempo reale) è attivo — include una richiesta a Google + Brave. I documenti lunghi (oltre 8 s di elaborazione prevista) restituiscono subito un check_id e inviano il risultato tramite webhook.
- Come viene conteggiato il pricing API?
- Un addebito per ogni POST su /v1/checks, a prescindere dalla lunghezza fino al limite piano (1.500 parole Pro, 50.000 Premium, custom Enterprise). Retry idempotenti (stessa Idempotency-Key + body entro 24h) non raddoppiano niente. Letture /v1/checks/{id} e SDK di supporto sono gratuite.
- Posso far girare l’API in self-host?
- Sì — github.com/NoplagLabs/noplag-engine è la stessa implementazione di riferimento Apache-2.0 utilizzata su engine.noplag.app. Con docker compose up ottieni un endpoint locale /v1/checks. Il livello cloud aggiunge il corpus gestito e le API key di Google/Brave; per il self-hosting completo devi usare le tue.
- C’è un header per retry dei rate limit di cui fidarsi?
- Su 429 restituiamo Retry-After in secondi. Gli header X-RateLimit-* sono sempre presenti — così può pre-throttlare su X-RateLimit-Remaining senza attendere un 429. Entrambi precisi e stabili tra deploy.
- Quanto spesso vengono aggiornati gli SDK?
- SDK Python e Node si auto-generano da openapi.yaml ad ogni tag engine. Maggiori release engine (v0.x → v0.y) rilasciano lo stesso giorno lungo SDK. Patch minori nella stessa settimana. Entrambi seguono semver; l’API cambia solo tra /v1 → /v2.
- Cosa succede se il corpus cambia a metà mese?
- Ogni check salva X-Engine-Commit e una data snapshot corpus. Rieseguire un check vecchio contro corpus attuale basta un parametro (?corpus_snapshot=…). Il report originale resta archiviato con il suo corpus — non cambiamo mai silenziosamente uno score precedente.
- Come posso testare senza consumare il mio traffico mensile?
- Chiavi test (nplg_test_…) usano una sandbox: API completa, nessuna persistenza, nessun conteggio su traffico mensile o limiti. Anche i webhook scattano dalla sandbox — test end-to-end gratuiti.
- Qual è il modo corretto per bulk check?
- Mandi in parallelo, rispettando i suoi rate limit — non c’è un endpoint batch (un batch di 500 documenti che fallisce sul 312 è peggio di 500 chiamate indipendenti). Per forti volumi, usi webhooks: submit, ottenga check_id subito, faccia altri 200 submit e gestisca i risultati fuori ordine.
- Posso limitare il check solo alle mie cartelle?
- Sì — corpora: [] con folder_id nel body filtra sui soli documenti privati. Con corpora: ["academic"] fa “solo academic + private”. Limite a ogni chiamata; nessun piano aggiuntivo richiesto.
- Cosa cambia per EU residency o on-prem?
- Piano Enterprise prevede endpoint EU dedicato (api.eu.noplag.com) con stessa superficie API, così i dati restano in EEA. Oppure self-host interno nella Sua VPC — stesso motore, stesso /v1, niente esce dalla rete. (Stiamo tornando a open-core; attestati formali tipo SOC 2 sono pianificati, non ancora pronti — engine auditabile è la soluzione di oggi.)
Ottenere una API key. Fare la prima chiamata.
Il free trial include 100 chiamate. Piano Pro 23€/mese per 1.000. Implementazione di riferimento Apache 2.0 se preferisce restare on-premise.