RESTOpenAPI 3.0 · Python + Node SDK · v0.4.2

Перевірка на плагіат API для розробників

REST endpoint для перевірки на плагіат і ШІ. OpenAPI 3.0, SDK для Python і Node, референc-реалізація Apache 2.0. Від першого curl до вебхуків — той самий рушій, що і на noplag.com.

REST · OpenAPI 3.0Python + Node SDKApache 2.0-референс
ПЕРШИЙ ЗАПИТ

Від нуля до оцінки схожості в одному curl.

POST текст — отримайте інтервали з оцінками. SDK не потрібен, компіляції не потрібно, пропрієтарного формату немає.

ЗАПИТ · bashКопіювати
$ 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"    }'
ВІДПОВІДЬ · 200 OK · application/jsonКопіювати
{  "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-и

Чотири endpoint-и. Один контракт. Версіюється в URL.

Одна й та сама специфікація OpenAPI 3.0 зберігається у відкритому репозиторії з відкритим вихідним кодом і на engine.noplag.app. SDK автоматично генеруються з неї під час кожного релізу з тегом.

POST/v1/checksВідправити на перевіркуСинхронна до 8 с; понад це — вебхук. Idempotency-Key обов’язковий.
GET/v1/checks/{id}Отримати перевіркуПовертає поточний стан звіту. Потокові інтервали через Accept: text/event-stream.
GET/v1/sources/{id}Переглянути джерелоДеталізація знайденого джерела за ID — повна URL, дата знімка, кеш/актуальність.
POST/v1/foldersКерувати папкамиСтворення / перелік / переміщення перевірок. Обмежує збіг у корпусі приватними папками.
POST/v1/webhooksДодати вебхукПідпис HMAC; експоненціальний ретрай 24 години; повтор доставлення через дашборд.
Повна документація — на api./docsopenapi.yaml
АВТЕНТИФІКАЦІЯ + ЛІМІТИ

Bearer-токени. Ключі ідемпотентності. Прямі rate-limit хедери.

Без екзотики. Стандартні HTTP правила — це працює з вашою middleware для ретрай.

АВТЕНТИФІКАЦІЯ

Bearer-токени. Один хедер, підпис не потрібен.

1.
Створіть ключDashboard → Settings → API. Ключі мають окремі права (читання / запис / адміністрування), можна швидко скинути.
2.
Передавайте на кожен викликAuthorization: Bearer nplg_live_…. Тестові ключі (nplg_test_) працюють із sandbox, що не зберігає робочі дані.
3.
Додавайте Idempotency-Key на POSTБудь-який UUID підходить. Однаковий ключ + тіло повертають кешовану відповідь 24 години — ретраї без дубльованих списань і перевірок.
Authorization: Bearer nplg_live_a82f...Idempotency-Key: 0e8f9c44-...
ЛІМІТИ

На ключ і на хвилину. Хедери показують поточний стан.

ТАРИФЗАП/ХВМІСЯЧНОBURST
Безкоштовний10100 / міс20
Pro601 000 / міс120
Premium30010 000 / міс600
EnterpriseІндивідуальноЗа домовленістюІндивідуально
X-RateLimit-Limit: 60X-RateLimit-Remaining: 41X-RateLimit-Reset: 1747920480Retry-After: 19  (only on 429)
SDK

Два SDK. Генеруються з однієї OpenAPI 3.0.

Python і Node виходять з кожним тегом ядра. Інші мови (Go, Ruby, Java) — через openapi.yaml, приймаємо PR від спільноти.

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 latency
99,95%аптайм SLA
3регіони (US/EU/AP)
OAPI 3формат спеки
Apache 2.0референс-реалізація
WEBHOOK-и

Довгі перевірки віддають колбек. З ретрайами, які не зводять з розуму.

01

Чотири івенти. Тіло — JSON. Підпис HMAC-SHA256 у хедері.

check.completedЗвіт готовий · повний JSON-звіт в тілі
check.failedПостійна помилка · код помилки + поради щодо ретраю
check.progressПроміжний прогрес · перелік знайдених джерел на даний момент
folder.sharedДоступ до папки надано колезі чи зовнішньому аудиторy
02

Експоненційний ретрай 24 години. Перевідправка з дашборда.

Ретрай-крива5с, 30с, 2м, 10м, 1г, 6г, 24г — далі dead-letter
Таймаут10с на з’єднання, 30с всього на спробу
Критерії успіхуHTTP 2xx-відповідь вчасно; редіректи підтримуються
UI для replayВиберіть доставку в дашборді й відправте на інший URL
03

Перевіряйте підпис. Відкидайте все, що не сходиться.

Кожна доставка — 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” не існує.

Прочитати нотатки по дизайну
ОБМЕЖЕННЯ ДИЗАЙНУ
IDEMPОднаковий Idempotency-Key + тіло за 24 години повертають ту ж відповідь. Ретрай при мережевих сбоях тим самим ключем — без дубльованої оплати чи перевірки.
VERОсновна версія — в URL (/v1, /v2). Зміни — це новий шлях; стару версію підтримуємо ще 12 місяців після оголошення.
ERRJSON з деталізацією проблеми за RFC 9457 для кожної 4xx/5xx. type, title, detail, instance + noplag.retry_strategy.
PAGПагінація курсором на кожному endpoint'і з переліком. ?limit=100&cursor=… повертає next_cursor. Offset не використовується, нові рядки не зламають перебір на 47-й сторінці.
OBSВідповідь включає X-Engine-Commit, X-Request-Id та Server-Timing по етапах. Можна повторити перевірку за ID; звіт містить лінк на саме той реліз рушія.
OPENРеференсна реалізація на Apache 2.0 доступна на github.com/NoplagLabs/noplag-engine. Можна розгорнути у власній інфраструктурі, якщо дані не можуть залишати вашу мережу — API ідентичний.
FAQ

Реальні питання від інтеграторів.

Яка затримка на типову перевірку?
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-референс для локального розміщення.

Перевірка на плагіат API для інтеграції