Detector de plagio API y REST
Endpoint REST adaptable para detectar plagio + IA. Especificación OpenAPI 3.0, SDKs para Python y Node, implementación de referencia Apache 2.0. Desde su primer curl hasta cargas con webhooks — mismo motor que opera en noplag.com.
De cero a un puntaje de similitud con un curl.
POST de texto, devuelve intervalos puntuados. No requiere SDK, ni compilación, ni formato propietario.
$ 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 } ]}Cuatro endpoints. Un contrato. Versionado en la URL.
La misma especificación OpenAPI 3.0 se encuentra tanto en el repositorio open source como en engine.noplag.app. Los SDK se regeneran a partir de ella en cada versión etiquetada.
Tokens Bearer. Claves de idempotencia. Cabeceras de límite directas.
Sin rarezas. Estándares HTTP — seguimos los mismos para que su middleware de reintentos funcione.
Tokens Bearer. Una cabecera, sin complicaciones.
Authorization: Bearer nplg_live_a82f...Idempotency-Key: 0e8f9c44-...Por clave, por minuto. Las cabeceras indican su estado exacto.
X-RateLimit-Limit: 60X-RateLimit-Remaining: 41X-RateLimit-Reset: 1747920480Retry-After: 19 (only on 429)Dos SDKs. Generados desde la misma espec OpenAPI 3.0.
Python + Node se publican en cada lanzamiento del motor. Otros lenguajes (Go, Ruby, Java) se generan desde openapi.yaml — PRs de la comunidad son bienvenidos.
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,});Comprobaciones largas le devuelven la llamada. Reintentos sin perder el control.
Cuatro tipos de eventos. Cuerpo JSON. Firma HMAC-SHA256 en la cabecera.
Reintentos exponenciales por 24 horas. Replicable desde el panel.
Compruebe la firma. Rechace lo que no coincida.
Cada entrega lleva X-Noplag-Signature: t=<unix>,v1=<hex>. Genere HMAC-SHA256 sobre timestamp + body con su secreto de webhook y compare en tiempo constante.
h = hmac.new(secret, f"{t}.{body}".encode(), hashlib.sha256).hexdigest()assert hmac.compare_digest(h, v1)Seguimos HTTP. Así se diseñó toda la API.
POST idempotente. Versionado en la URL. Errores que indican el siguiente paso. Cabeceras que informan el estado exacto del límite. Paginación por cursor, nunca por offset. Tiempos en UTC ISO 8601. Sin dialecto HATEOAS propio, sin responder 200 OK en errores, ni exigir OAuth para llamadas servidor-a-servidor. El documento de diseño es el RFC 9110 + OpenAPI 3.0 — no hay un “camino Noplag” que deba aprender.
Lea las notas de diseñoPreguntas de verdad de los integradores.
- ¿Qué latencia tiene la llamada con un documento típico?
- p50 de aproximadamente 600 ms para una revisión de 500 palabras contra el corpus indexado; p95 ~1,8 s. Añade ~2 s si Layer W (verificación web en vivo) está activado — ese proceso consulta Google y Brave. Para documentos largos (más de 8 s de procesamiento esperado), se devuelve un check_id de inmediato y se notifica el resultado por webhook.
- ¿Cómo se mide la facturación en la API?
- Un cargo por cada envío a /v1/checks, sin importar tamaño de documento hasta el límite por plan (1.500 palabras Pro, 50.000 Premium, Enterprise personalizado). Reintentos con la misma Idempotency-Key + cuerpo en 24h no suman doble. Lecturas a /v1/checks/{id} y llamadas auxiliares del SDK son gratis.
- ¿Se puede auto-hospedar la API?
- Sí — github.com/NoplagLabs/noplag-engine es la misma implementación de referencia bajo Apache 2.0 que se ejecuta en engine.noplag.app. Con docker compose up obtienes un endpoint local /v1/checks. La versión en la nube añade el corpus gestionado y las claves API de Google/Brave; para autohospedaje completo, debes aportar tus propias claves.
- ¿Existe cabecera de retry para límites de uso en la que pueda confiar?
- Al 429 devolvemos Retry-After en segundos. Las X-RateLimit-* van en cada respuesta — puede auto-regular con X-RateLimit-Remaining sin esperar el 429. Ambas son precisas y estables en despliegues.
- ¿Cada cuánto salen los SDKs?
- SDKs de Python y Node se actualizan automáticamente desde openapi.yaml con cada etiqueta del engine. Releases mayores (v0.x → v0.y) salen el mismo día para cada SDK. Parches salen en la misma semana. Mantienen semver; la ruptura solo ocurre en /v1 → /v2.
- ¿Qué pasa si el corpus cambia durante el mes?
- Cada comprobación sella X-Engine-Commit y timestamp del corpus. Para repetir una comprobación vieja contra el corpus actual basta un parámetro (?corpus_snapshot=…). El informe original queda preservado con su snapshot — nunca modificamos un puntaje original ya entregado.
- ¿Cómo pruebo sin gastar la cuota mensual?
- Keys de prueba (nplg_test_…) van a un sandbox: toda la superficie del API, nunca se guarda el envío, ni cuenta para el límite mensual ni rate limits. Webhooks también disparan desde el sandbox, así que puede hacer pruebas end-to-end gratis.
- ¿Cuál es la forma correcta para chequear en lote?
- Envíe en paralelo hasta su límite — no hay endpoint batch por diseño (un lote de 500 que falla en el doc 312 es peor que 500 llamadas independientes). Para volúmenes altos use webhooks: envíe, reciba check_id inmediatamente, haga los 200 siguientes, maneje los resultados según vayan llegando.
- ¿Puedo limitar la búsqueda a solo mis carpetas?
- Sí — corpora: [] con folder_id en el cuerpo busca solo en carpetas privadas. Combínelo con corpora: ["academic"] para "solo academic + mis carpetas". Se configura por llamada; no requiere pago aparte.
- ¿Qué cambia para residencia UE o setup on-prem?
- En Enterprise se crea endpoint dedicado UE (api.eu.noplag.com) con misma superficie OpenAPI, así los datos personales se mantienen en EEE. O puede auto-hospedar con la referencia dentro de su VPC — mismo motor, mismo contrato /v1, nada sale de su red. (Estamos relanzando open-core; auditorías oficiales como SOC 2 están en el plan, todavía no terminadas — lo que ofrecemos es el motor auditable mientras tanto.)
Consiga una clave API. Haga su primera llamada.
Prueba gratis incluye 100 llamadas. Pro $23/mes para 1.000. Implemente Apache 2.0 en su red si prefiere mantener todo interno.