Документація API
Перевіряйте контент програмно: зображення (AI/дипфейки), тексти (фейкові новини, маніпуляції) та відео із соцмереж (з автоматичною транскрипцією). Аналізи використовують кредити з вашого акаунта — ті самі, що й на сайті. Ключ згенеруєте в акаунті, вкладка API.
Base URL: https://czytofejk.pl/api/public/v1
Авторизація
Кожен запит потребує заголовка Authorization із ключем у форматі czf_…:
Authorization: Bearer czf_TWOJ_KLUCZ
Вартість у кредитах
| Аналіз | Вартість |
|---|---|
| Текст (до 1000 знаків — надлишок обрізаємо) | 10–150 кредитів |
| Зображення за посиланням (AI / дипфейк) | 10–60 кредитів |
| Відео за посиланням (TikTok, YouTube…) — транскрипція + аналіз | 10–600 кредитів |
| Дублікат (контент, який будь-хто вже аналізував раніше) | 0 кредитів |
На старті ми блокуємо заставу (верхня межа діапазону), а після аналізу повертаємо різницю — ви платите точно реальну вартість операції. Якщо аналіз завершиться помилкою з нашого боку, повертається вся сума. API розраховується лише кредитами (поповнення та підписки: ціни).
Ліміти запитів
60 запитів/хв на ключ (план Redakcja: 300/хв) для POST /checks; читання статусу та балансу: 300/хв. Після перевищення: 429 із заголовком Retry-After.
POST /checks — запуск аналізу
JSON-тіло з рівно одним із полів: text (текст для перевірки або посилання на відео із соцмереж) чи image_url (пряме посилання на зображення). Опційно "wait": true — синхронний режим (нижче).
Необов'язкове поле language (pl — типово, en, uk) задає мову тексту вердикту (підсумок, обґрунтування, сигнали). Значення enum (PRAWDA | MANIPULACJA | FAŁSZ) залишаються незмінними незалежно від мови. Увага: дедуплікація працює за контентом — повторна перевірка того самого контенту повертає наявний вердикт мовою, якою його згенеровано.
Синхронний режим — результат в одній відповіді
З "wait": true тримаємо запит відкритим до завершення аналізу (макс. ~90 с) і повертаємо 200 з готовим result — без полінгу. Якщо аналіз триває довше (зазвичай відео з транскрипцією), отримаєте звичайний 202 running і забираєте результат GET-запитом — найкраще теж із ?wait=true (long-poll). Зображення й тексти майже завжди вкладаються в бюджет.
curl — синхронно (найпростіше)
curl -X POST https://czytofejk.pl/api/public/v1/checks \
-H "Authorization: Bearer czf_TWOJ_KLUCZ" \
-H "Content-Type: application/json" \
-d '{"text": "Rząd potwierdził, że od sierpnia ceny prądu wzrosną o 45%.", "wait": true}'
# → 200 { "id": "…", "status": "done", "result": { "verdict": "FAŁSZ", … } }curl — асинхронно
curl -X POST https://czytofejk.pl/api/public/v1/checks \
-H "Authorization: Bearer czf_TWOJ_KLUCZ" \
-H "Content-Type: application/json" \
-d '{"text": "Rząd potwierdził, że od sierpnia ceny prądu wzrosną o 45%."}'
# → 202 { "id": "a1b2c3d4e5", "status": "running", … }
# potem (long-poll do wyniku):
curl "https://czytofejk.pl/api/public/v1/checks/a1b2c3d4e5?wait=true" \
-H "Authorization: Bearer czf_TWOJ_KLUCZ"JavaScript (Node) — синхронно
const res = await fetch("https://czytofejk.pl/api/public/v1/checks", {
method: "POST",
headers: {
Authorization: `Bearer ${process.env.CZYTOFEJK_API_KEY}`,
"Content-Type": "application/json",
},
body: JSON.stringify({
image_url: "https://example.com/zdjecie.jpg",
wait: true,
}),
});
const check = await res.json();
if (check.status === "done") console.log(check.result); // gotowy werdyktPython — асинхронно з long-poll (напр. відео)
import os, requests
API = "https://czytofejk.pl/api/public/v1"
HEADERS = {"Authorization": f"Bearer {os.environ['CZYTOFEJK_API_KEY']}"}
check = requests.post(f"{API}/checks", headers=HEADERS, json={
"text": "https://www.tiktok.com/@uzytkownik/video/724..." # film → transkrypcja
}).json()
# long-poll: każde wywołanie czeka do wyniku albo ~90 s
while check.get("status") == "running":
check = requests.get(
f"{API}/checks/{check['id']}", params={"wait": "true"},
headers=HEADERS, timeout=120,
).json()
print(check["result"]["verdict"])Відповідь 202 (аналіз запущено)
{
"id": "a1b2c3d4e5",
"status": "running",
"cost_tokens": 1,
"result_url": "https://czytofejk.pl/w/a1b2c3d4e5"
}Дублікат повертає 200 з "deduped": true і "cost_tokens": 0 (статус може бути одразу done).
GET /checks/{id} — статус і результат
З ?wait=true (рекомендовано) запит чекає на результат — макс. ~90 с на виклик; повторюйте до статусу done. Без wait повертає стан одразу (тоді опитуйте кожні ~2 с). Час аналізу: зображення 5–20 с, тексти 10–30 с, відео з транскрипцією — до кількох хвилин. Статус error = кредити повернуто автоматично.
{
"id": "a1b2c3d4e5",
"status": "done",
"result_url": "https://czytofejk.pl/w/a1b2c3d4e5",
"result": {
"kind": "tresc", // albo "plik" (obraz)
"verdict": "MANIPULACJA", // PRAWDA | MANIPULACJA | FAŁSZ
"verdictSub": "…", // 1–2 zdania oceny
"summary": "…", // uzasadnienie
"signals": [{ "strong": true, "text": "…" }],
"sources": [{ "domain": "…", "title": "…", "url": "…" }]
// dla kind="plik": "percent" 0–100 (prawdopodobieństwo AI/fałszerstwa),
// "verdict" np. "AI" / "AUTENTYCZNE" oraz lista sygnałów technicznych
}
}GET /balance — баланс кредитів
{
"plan": "pro",
"tokens": { "subscription": 184, "topup": 40, "total": 224 }
}Коди помилок
| Статус | error | Значення |
|---|---|---|
| 401 | invalid_api_key | Відсутній/невірний/відкликаний ключ |
| 402 | insufficient_tokens | Замало кредитів (поля required, balance) |
| 400 | invalid_input | Вкажіть рівно одне поле: text або image_url |
| 422 | text_too_short / not_an_image | Контент не придатний для аналізу |
| 429 | rate_limited | Ліміт запитів на хвилину — зачекайте Retry-After |
| 404 | not_found | Немає перевірки з таким id |
| 500 | analysis_failed | Помилка з нашого боку — спробуйте ще раз |
Добрі практики
- Тримайте ключ у змінній середовища на боці сервера; для кожної інтеграції — окремий ключ (простіші ротація та аудит — колонка «останнє використання» в акаунті).
- Результат має сталий публічний пермалінк
result_url— можете давати його читачам як доказ. - Надсилаєте той самий контент кілька разів? Нічого не втрачаєте — дедуплікація відповість миттєво й безкоштовно.
- Вердикт — це оцінка ймовірності на основі доказів, а не вирок — для редакційних рішень загляньте в
signalsіsources.
Питання, вищі ліміти, вебхуки? Напишіть нам. Версіонуємо під /v1 — зламні зміни підуть під новий шлях.