Перевірка на плагіат API для розробників
REST endpoint для перевірки на плагіат і ШІ. OpenAPI 3.0, SDK для Python і Node, референc-реалізація Apache 2.0. Від першого curl до вебхуків — той самий рушій, що і на noplag.com.
Від нуля до оцінки схожості в одному curl.
POST текст — отримайте інтервали з оцінками. SDK не потрібен, компіляції не потрібно, пропрієтарного формату немає.
$ 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 } ]}Чотири endpoint-и. Один контракт. Версіюється в URL.
Одна й та сама специфікація OpenAPI 3.0 зберігається у відкритому репозиторії з відкритим вихідним кодом і на engine.noplag.app. SDK автоматично генеруються з неї під час кожного релізу з тегом.
Bearer-токени. Ключі ідемпотентності. Прямі rate-limit хедери.
Без екзотики. Стандартні HTTP правила — це працює з вашою middleware для ретрай.
Bearer-токени. Один хедер, підпис не потрібен.
Authorization: Bearer nplg_live_a82f...Idempotency-Key: 0e8f9c44-...На ключ і на хвилину. Хедери показують поточний стан.
X-RateLimit-Limit: 60X-RateLimit-Remaining: 41X-RateLimit-Reset: 1747920480Retry-After: 19 (only on 429)Два SDK. Генеруються з однієї OpenAPI 3.0.
Python і Node виходять з кожним тегом ядра. Інші мови (Go, Ruby, Java) — через openapi.yaml, приймаємо PR від спільноти.
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,});Довгі перевірки віддають колбек. З ретрайами, які не зводять з розуму.
Чотири івенти. Тіло — JSON. Підпис HMAC-SHA256 у хедері.
Експоненційний ретрай 24 години. Перевідправка з дашборда.
Перевіряйте підпис. Відкидайте все, що не сходиться.
Кожна доставка — X-Noplag-Signature: t=<unix>,v1=<hex>. Обчисліть HMAC-SHA256 для timestamp+body за секретом вебхука, порівняйте через постійну-часову перевірку.
h = hmac.new(secret, f"{t}.{body}".encode(), hashlib.sha256).hexdigest()assert hmac.compare_digest(h, v1)Дотримуємось стандарту HTTP. Це вся документація до API.
Idempotent на POST. Версія в URL. Помилки кажуть, що робити далі. Хедери показують місце в rate-limit. Пагінація — курсором, не offset. Таймстампи у UTC ISO 8601. Немає власного HATEOAS-діалекту, не повертаємо 200 OK на помилках, не змушуємо впроваджувати OAuth на server-to-server. Основний документ — RFC 9110 та OpenAPI 3.0. Окремого “шляху Noplag” не існує.
Прочитати нотатки по дизайнуРеальні питання від інтеграторів.
- Яка затримка на типову перевірку?
- p50 близько 600 мс для перевірки 500 слів по індексованому корпусу; p95 ~1,8 с. Додається ~2 с, якщо увімкнено Layer W (перевірка в реальному часі через веб) — це включає запити до Google і Brave. Для довгих документів (очікуваний час роботи понад 8 с) одразу повертається check_id, а результат надсилається через webhook.
- Як будується тарифікація для API?
- Один платний виклик за кожний /v1/checks, незалежно від розміру до межі тарифу (1 500 слів для Pro, 50 000 — Premium, Enterprise — індивідуально). Idempotent-ретраї з тим же ключем + тілом за 24 год не враховуються повторно. /v1/checks/{id} та SDK допоміжні виклики — безкоштовні.
- Чи можна розгорнути API локально?
- Так — github.com/NoplagLabs/noplag-engine це та сама референтна реалізація на Apache-2.0, яка працює на engine.noplag.app. docker compose up запускає локальний endpoint /v1/checks. Хмарний рівень додає керований корпус і ключі API Google/Brave; для повної самостійної установки використовуйте власні ключі.
- Чи є достовірний хедер для ретраю після rate-limit?
- На 429 повертаємо Retry-After в секундах. Заголовки X-RateLimit-* у кожній відповіді — можна перед-навантажувати по X-RateLimit-Remaining, не чекаючи 429. Обидва стабільні й точні.
- Яка частота виходу SDK?
- SDK для Python і Node регенеруються з openapi.yaml на кожному тегу рушія. Мажорні релізи ядра (v0.x → v0.y) — SDK того ж дня. Виправлення патчів — протягом тижня. Обидва SDK дотримуються semver; API змінюється лише при переході /v1 → /v2.
- Що станеться, якщо корпус оновиться посеред місяця?
- Кожна перевірка містить X-Engine-Commit та timestamp корпусу. Повторити стару перевірку на новому корпусі — це один параметр (?corpus_snapshot=…). Оригінал звіту зберігається із початковим знімком — ми ніколи не змінюємо раніше повернуту оцінку схожості.
- Як тестувати без втрати місячного ліміту?
- Тестові ключі (nplg_test_…) запускають sandbox: повна поверхня API, нічого не зберігається, не з’їдає ліміт чи rate-limit. Вебхуки теж спрацьовують із sandbox — інтеграційні тести безкоштовні.
- Як правильно робити масові перевірки?
- Відправляйте паралельно до ліміту. Спеціального batch-endpoint'у немає (невдала 500-документна перевірка на 312-у збійна — гірше, ніж 500 окремих). Для великих потоків комбінуйте API з вебхуками: submit → отримайте check_id → одразу наступні 200 → обробляйте результати по мірі надходження.
- Чи можна обмежити перевірки лише своїми папками?
- Так — corpora: [] з folder_id у запиті — перевірка лише по приватних папках. Можна комбінувати з corpora: ["academic"]. Обмеження діє на рівні запиту, тариф не змінюється.
- Що змінюється для EU residency або on-prem?
- Enterprise-тариф дає окремий endpoint з EU residency (api.eu.noplag.com) з тією ж OpenAPI. Персональні дані залишаються у EEA. Або розміщуйте референс-реалізацію лише у своїй VPC — той самий рушій, той самий /v1, дані не залишають мережу. (Переходимо на open-core; формальні сертифікати типу SOC 2 — у планах, поки що їх немає. Публічний рушій — те, що пропонуємо зараз.)
Отримайте API-ключ. Виконайте перший виклик.
Безкоштовний пробний період — 100 викликів API. Pro — $23/міс за 1 000. Apache 2.0-референс для локального розміщення.