Logiciel anti-plagiat API REST et SDKs
Point d’accès REST prêt à l’emploi pour la détection de plagiat et d’IA. Spéc OpenAPI 3.0, SDK Python et Node, implémentation de référence Apache 2.0. Du premier curl jusqu’au volume avec webhook — même moteur qu’à noplag.com.
De zéro à un score de similarité avec un curl.
POST du texte, retour des intervalles scorés. Pas besoin de SDK, pas de compilation, pas de format propriétaire.
$ 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 } ]}Quatre endpoints. Un contrat. Versionné dans l’URL.
La même spécification OpenAPI 3.0 est disponible dans le dépôt open source et sur engine.noplag.app. Les SDK sont régénérés à partir de celle-ci à chaque version taguée.
Jetons Bearer. Clés d’idempotence. En-têtes de limites honnêtes.
Rien d’exotique. Idiomes HTTP standards — suivis pour que vos middlewares de retry marchent déjà.
Jetons Bearer. Un en-tête, pas de danse de signature.
Authorization: Bearer nplg_live_a82f...Idempotency-Key: 0e8f9c44-...Par clé, par minute. Les en-têtes indiquent exactement votre position.
X-RateLimit-Limit: 60X-RateLimit-Remaining: 41X-RateLimit-Reset: 1747920480Retry-After: 19 (only on 429)Deux SDKs. Générés depuis la même spéc OpenAPI 3.0.
Python + Node générés à chaque version taguée du moteur. Autres langages (Go, Ruby, Java) générés depuis openapi.yaml — PRs bienvenus sur la communauté.
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,});Les vérifications longues vous rappellent. Reprise sans casse-tête.
Quatre types d’événement. Corps JSON. Signature HMAC-SHA256 dans l’en-tête.
Reprise exponentielle sur 24 heures. Rejouable depuis le dashboard.
Vérifiez la signature. Rejetez tout ce qui ne colle pas.
Chaque livraison porte un X-Noplag-Signature : t=<unix>,v1=<hex>. Calculez le HMAC-SHA256 sur timestamp + corps avec votre secret webhook et comparez en temps constant.
h = hmac.new(secret, f"{t}.{body}".encode(), hashlib.sha256).hexdigest()assert hmac.compare_digest(h, v1)On suit HTTP. Voilà tout le doc d’API.
Idempotence sur POST. Version dans l’URL. Les erreurs incluent la marche à suivre. Les en-têtes affichent votre place dans la fenêtre de limite. Pagination par curseur, pas par offset. Horodates en UTC ISO 8601. Pas de dialecte HATEOAS maison, pas de 200 OK sur erreur, pas d’OAuth pour du serveur/serveur. Le doc d’API c’est RFC 9110 et OpenAPI 3.0 — il n’y a pas de « manière Noplag » à apprendre.
Lire les notes de conceptionLes vraies questions posées par nos équipes intégration.
- Quelle latence d'appel pour un document typique ?
- p50 autour de 600 ms pour une vérification de 500 mots sur le corpus indexé ; p95 environ 1,8 s. Ajouter environ 2 s si Layer W (vérification web en direct) est activé — cela implique un aller-retour via Google et Brave. Pour les documents longs (plus de 8 s de traitement attendu), un check_id est renvoyé immédiatement et le rappel se fait via webhook.
- Comment la tarification s’applique-t-elle à l’API ?
- Un appel facturé par POST sur /v1/checks, quel que soit la taille du document jusqu’au plafond du forfait (1 500 mots Pro, 50 000 Premium, personnalisé Entreprise). Tries idempotents avec la même Idempotency-Key + corps sous 24 h non comptés en double. Lecture /v1/checks/{id} et SDK auxiliaires gratuits.
- Puis-je auto-héberger l’API ?
- Oui — github.com/NoplagLabs/noplag-engine est la même implémentation de référence Apache 2.0 que celle utilisée sur engine.noplag.app. docker compose up vous donne un endpoint local /v1/checks. La version cloud ajoute le corpus géré et les clés API Google/Brave ; pour l’auto-hébergement complet, fournissez vos propres clés.
- Existe-t-il un header retry de limite fiable ?
- Sur 429, on rend Retry-After en secondes. Les en-têtes X-RateLimit-* sont sur chaque réponse — vous pouvez prélimiter avec X-RateLimit-Remaining sans attendre un 429. Les deux sont exacts, stables entre déploiements.
- Quel rythme pour la sortie SDK ?
- Python et Node SDKs générés auto depuis openapi.yaml à chaque tag du moteur. Majeur (v0.x → v0.y) = SDK même jour. Correctifs patch = même semaine. Les deux suivent semver ; peu de breaking sur l’API sous-jacente hors migration /v1 → /v2.
- Que se passe-t-il si le corpus change en cours de mois ?
- Chaque vérification tamponne X-Engine-Commit et un horodatage snapshot du corpus. Relancer une ancienne vérif sur le corpus récent = un paramètre (?corpus_snapshot=…). Le rapport d’origine reste conservé — aucun score modifié a posteriori.
- Comment tester sans consommer mon quota mensuel ?
- Les clés test (nplg_test_…) passent sur un sandbox : API complète, rien conservé, aucun impact sur votre quota ou limites. Webhooks tirent aussi depuis le sandbox, donc tests complets gratuits.
- Quelle méthode correcte pour du bulk ?
- Soumettre en parallèle jusqu’à votre limite — il n’y a pas d’endpoint batch par choix (un lot de 500 qui échoue sur le 312e est pire que 500 appels isolés). Pour gros volumes, combinez API et webhooks : soumettre, récupérer check_id, enchaîner 200 soumissions, traiter à réception.
- Puis-je limiter un check à mes seuls dossiers ?
- Oui — corpora: [] avec folder_id dans le body cible seulement les dossiers privés utilisateur. À combiner avec corpora: ["academic"] pour “only academic + mes dossiers”. Scope par requête ; pas de forfait séparé.
- Qu’est-ce qui change pour résidence UE ou on-prem ?
- Niveau Entreprise = endpoint dédié résidence UE (api.eu.noplag.com) même surface OpenAPI, aucune donnée hors EEE. Ou auto-hébergez toute la référence dans votre VPC — même moteur, même /v1, rien ne sort. (On relance en open-core ; SOC 2 et attestations formelles sur la roadmap, pas encore. On fournit le moteur auditable en attendant.)
Obtenez votre clé API. Faites votre premier appel.
Essai gratuit avec 100 appels API. Forfait Pro 23 $/mois pour 1 000. Référence Apache 2.0 si vous préférez garder les appels internes.