Усі перевірки розділу «Інструменти» доступні не тільки зі сторінки, а й із вашої програми: той самий розрахунок і той самий вигляд відповіді. Тут зібрано все, щоб почати за десять хвилин.
Як отримати ключ
- Увійдіть у кабінет інструментів за кодом на пошту.
- Ключ доступу входить у тариф «Профі». На безкоштовному й «Базовому» рівні ключа немає — спроба його випустити відповість
TOOL_KEY_NOT_ALLOWED. - У розділі «Ключі доступу» натисніть «Створити ключ» і дайте йому ім’я — за ним ви впізнаєте ключ у списку.
- Відкрите значення ключа показується один раз — у мить створення. Ми зберігаємо лише його відбиток, тому «показати ще раз» не можемо ні вам, ні собі. Скопіюйте ключ одразу. Загубили — відкличте старий і випустіть новий.
Ключ виглядає так: приставка tlk_ і 64 шістнадцяткові знаки. За приставкою його видно в чужому журналі — не залишайте ключ у відкритому коді сторінки й не кладіть у сховище коду.
Ключів на тарифі «Профі» можна тримати п’ять. Відкликаний перестає працювати тієї ж миті.
Як передати ключ
Ключ іде заголовком Authorization зі словом Bearer:
Authorization: Bearer tlk_ВАШ_КЛЮЧ
Інші способи не працюють навмисно: Authorization: Basic …, порожній Bearer без значення або ключ без приставки tlk_ отримають 401 TOOL_KEY_INVALID. Тихо працювати гостем ми не станемо — інакше ви впиралися б у гостьові межі й читали це як випадкові відмови.
Ключ працює тільки на тому сайті, де його видано. Той самий ключ на адресі іншого сайту платформи відповідає 401 TOOL_KEY_INVALID — тим самим кодом, що й вигаданий ключ.
Заголовка немає зовсім — це не помилка: запит проходить як гостьовий, з гостьовими межами.
Перший запит
Одна перевірка — один запит POST. Адреса складається з виду інструмента:
POST https://seo-gen.com.ua/api/public/tools/<kind>/run
Повний приклад, який можна скопіювати й запустити (підставте свій ключ):
curl -X POST https://seo-gen.com.ua/api/public/tools/http-status-checker/run \
-H "Authorization: Bearer tlk_ВАШ_КЛЮЧ" \
-H "Content-Type: application/json" \
-d '{"target":"https://example.com/"}'
У тілі запиту два поля: target — адреса, яку перевіряємо, і необов’язковий options — налаштування виду.
З чого складається відповідь
Успішна відповідь — 200 і два поля: data з результатом і limit із залишком обсягу. У прикладі нижче розділ headers прибрано, щоб не розтягувати сторінку — у живій відповіді він є.
{
"data": {
"kind": "http-status-checker",
"target": "https://example.com/",
"checkedAt": "2026-09-19T08:12:07.078Z",
"cached": false,
"verdict": "ok",
"sections": [
{
"id": "summary",
"rows": [
{ "status": 200, "final": "https://example.com/", "hops": 0, "time_ms": 95, "soft_404": "" }
],
"columns": ["status", "final", "hops", "time_ms", "soft_404"]
},
{ "id": "chain", "rows": [], "columns": ["step", "from", "to", "status", "scheme"] }
],
"notes": []
},
"limit": { "remaining": null }
}
data.kind— вид інструмента — той самий, що в адресіdata.target— адреса, яку перевірили;null— у виду її немаєdata.checkedAt— час перевірки, ISO-8601 з часовим поясомdata.cached—true— відповідь узята з нашого кешу (живе 10 хвилин); час при цьому залишається часом самої перевіркиdata.verdict— одне слово підсумку — перелік нижчеdata.sections— розділи результату: у кожногоid,rowsіcolumns— порядок колонокdata.notes— коди застережень (не готовий текст): чому перевірили не все й що варто знатиlimit.remaining— скільки перевірок лишилось;nullозначає «межі немає»
Якщо розділ показано не повністю, у нього є capped з двома числами: скільки показано й скільки знайдено.
Слова підсумку
ok— перевірили, біди не знайшлиguess— визначили приблизно: відповідь тримається на одній слабкій ознаціpartial— перевірили частково — частина не відбулася з НАШОЇ причини (наш строк, наша межа розміру, нас притримали за темпом). Числа «перевірено N із M» стоять у підсумкуwarn— є застереженняunknown— визначити не вдалося: відповідь сайту розібрати не вийшлоfail— знайшли поломку
Види інструментів і що їм передавати
Усі види нижче працюють за ключем. Стовпчик «Налаштування» — вміст поля options: у круглих дужках тип і значення за умовчанням, у квадратних — перелік допустимих значень.
Вид (kind) | Назва | Адреса | Налаштування (options) | Розділи відповіді |
|---|---|---|---|---|
audit | Аудит сайту | обов’язкова | user_agent (select, "*") [*|Googlebot|Bingbot|YandexBot|GPTBot|ClaudeBot|PerplexityBot|Google-Extended] | summary, issues, robots_issues, sitemap_issues, hreflang_issues, sources, conflicts, plan, chain, checks, directives, meta, headings |
seo-checker | SEO-аналіз сторінки | обов’язкова | check_links (boolean, true) | summary, issues, indexability, meta, headings, content, images, links |
cms-detector | CMS Detector / Визначити CMS сайту | обов’язкова | — | cms, signals, tech |
indexability-checker | Перевірка індексованості | обов’язкова | user_agent (select, "*") [*|Googlebot|Bingbot|YandexBot|GPTBot|ClaudeBot|PerplexityBot|Google-Extended]; check_targets (boolean, true) | verdict, conflicts, sources, targets, plan |
http-status-checker | Перевірка кодів відповіді HTTP | обов’язкова | check_domain_variants (boolean, false) | summary, chain, variants, headers |
redirect-checker | Перевірка редиректів | обов’язкова | check_domain_variants (boolean, false) | summary, chain, variants, headers |
robots-checker | Перевірка robots.txt | обов’язкова | user_agent (select, "*") [*|Googlebot|Bingbot|YandexBot|GPTBot|ClaudeBot|PerplexityBot|Google-Extended]; paths (list); custom_file (textarea) | verdict, paths, ai_bots, issues, file, health |
sitemap-checker | Перевірка sitemap.xml | обов’язкова | check_urls (boolean, true); sample_size (number, 20) | summary, robots, issues, tree, sample, urls, searched |
robots-meta-checker | Перевірка meta robots | обов’язкова | user_agent (select, "*") [*|Googlebot|Bingbot|YandexBot|GPTBot|ClaudeBot|PerplexityBot|Google-Extended]; with_robots_txt (boolean, true) | verdict, issues, sources, directives |
canonical-checker | Перевірка canonical | обов’язкова | check_target (boolean, true) | summary, checks, chain |
link-extractor | Витяг посилань зі сторінки | обов’язкова | check_status (boolean, true); unique_only (boolean, false) | summary, links, domains, special |
link-attributes | Перевірка nofollow / sponsored / ugc | обов’язкова | my_domain (domain); check_status (boolean, true) | page_block, summary, links, mine |
anchor-analysis | Аналіз анкорів посилань | обов’язкова | commercial_words (textarea) | types, anchors, words, conflicts |
meta-extractor | Витяг метатегів | обов’язкова | — | summary, tags, cards, code |
hreflang-checker | Перевірка hreflang | обов’язкова | check_return (boolean, true) | summary, alternates, reciprocal, issues |
headings-extractor | Витяг заголовків H1–H6 | не потрібна | html (textarea) | tiles, outline |
pagespeed-checker | PageSpeed / Core Web Vitals Checker | обов’язкова | strategy (select, "mobile") [mobile|desktop] | summary, vitals, field, opportunities |
broken-links | Перевірка «битих» посилань | обов’язкова | mode (select, "page") [page|site]; max_pages (number, 100); check_status (boolean, true); urls (textarea) | summary, broken, redirects, skipped |
internal-links | Перевірка внутрішніх посилань | обов’язкова | mode (select, "page") [page|site]; max_pages (number, 100); check_status (boolean, true); subdomains_internal (boolean, false); urls (textarea) | summary, links, dead_ends, orphans |
external-links | Перевірка зовнішніх посилань | обов’язкова | mode (select, "page") [page|site]; max_pages (number, 100); check_status (boolean, true); subdomains_internal (boolean, false); urls (textarea) | summary, links, skipped |
sitemap-generator | Генератор sitemap.xml | не потрібна | urls (textarea); alternates (boolean, true); locales (text, "uk, ru, en"); lastmod (date); changefreq (select) [|always|hourly|daily|weekly|monthly|yearly|never]; priority (number) | numbers, xml, notes, next |
json-ld-validator | Перевірка JSON-LD | не потрібна | code (textarea) | summary, blocks, issues |
hreflang-generator | Генератор hreflang | не потрібна | versions (rows); x_default (select); format (select, "html") [html|xml|http]; site_country (country, "UA"); comments (boolean); heads (textarea) | numbers, code, checks, map |
Списки адрес і файли
Список адрес і обхід сайту йдуть у чергу: запит відповідає одразу, а результат забирається за посиланням.
curl -X POST https://seo-gen.com.ua/api/public/tools/http-status-checker/batch \
-H "Authorization: Bearer tlk_ВАШ_КЛЮЧ" \
-H "Content-Type: application/json" \
-d '{"list":"https://example.com/\nhttps://example.com/nope\nне адрес"}'
У відповіді 202: номер завдання, посилання на нього, скільки адрес прийнято і перелік відхилених рядків одразу — з номером рядка й причиною.
{
"data": {
"id": "537f4024-0537-4abc-b564-56dc55569538",
"url": "/api/public/tools/jobs/537f4024-0537-4abc-b564-56dc55569538",
"accepted": 2,
"rejected": [ { "code": "TARGET_INVALID", "line": 3, "value": "не адрес" } ],
"status": "queued"
},
"limit": { "remaining": 4997 }
}
Список можна надіслати й файлом — multipart/form-data, поле file; підходять CSV, XLSX і TXT до 5 МБ:
curl -X POST https://seo-gen.com.ua/api/public/tools/http-status-checker/batch \
-H "Authorization: Bearer tlk_ВАШ_КЛЮЧ" \
-F "file=@spisok.csv"
Хід і результат — тим самим посиланням. Поле job.status проходить queued → running → done, а job.done і job.total показують поступ:
curl https://seo-gen.com.ua/api/public/tools/jobs/537f4024-0537-4abc-b564-56dc55569538 \
-H "Authorization: Bearer tlk_ВАШ_КЛЮЧ"
Готовий результат вивантажується файлом — таблицею або JSON:
curl -OJ https://seo-gen.com.ua/api/public/tools/jobs/537f4024-0537-4abc-b564-56dc55569538/export.csv \
-H "Authorization: Bearer tlk_ВАШ_КЛЮЧ"
curl -OJ https://seo-gen.com.ua/api/public/tools/jobs/537f4024-0537-4abc-b564-56dc55569538/export.json \
-H "Authorization: Bearer tlk_ВАШ_КЛЮЧ"
Обхід сайту — той самий маршрут, але замість списку одна адреса й options.mode = "site". Скільки сторінок обійти, каже тариф.
Що вважається витратою
- Одна перевірка
POST …/run— одна одиниця місячного обсягу тарифу й одне звернення за ключем. - Список із N адрес — N одиниць обсягу: кожна адреса це окремий похід до чужого сайту.
- Обхід сайту — одна одиниця в мить постановки в чергу; скільки сторінок він пройде, обмежує тариф.
- Відповідь із кешу (
cached: true) обсяг усе одно витрачає: обсяг рахує звернення, а не походи. - Відмова через межу (
QUOTA_EXCEEDED,API_QUOTA_EXCEEDED) приходить ДО роботи: рахувати чужий сайт і потім казати «не покладено» ми не станемо. - Перегляд ходу завдання і вивантаження результату обсягу не витрачають.
Відмови
Відмова — це завжди тіло з двома полями: code машинним словом і error підписом мовою запиту (мову беремо із заголовка Accept-Language). Той самий код дублюється заголовком X-CMS-Error-Code.
| Код | HTTP | Що означає |
|---|---|---|
TOOL_KEY_INVALID | 401 | Ключ не підійшов: не той, відкликаний, з іншого сайту або переданий не тим способом. |
TOOL_KEY_NOT_ALLOWED | 403 | Ключ є, але тариф його більше не дозволяє — підписку понизили або вона скінчилася. |
TOOL_KIND_UNKNOWN | 400 | Такого виду інструмента немає. |
TOOL_NOT_IMPLEMENTED | 501 | Вид оголошено, але він ще в розробці. |
TARGET_INVALID | 422 | Адресу не передали або вона не схожа на адресу. |
TARGET_NOT_ALLOWED | 400 | Адреса не веде у відкритий інтернет: внутрішня чи службова мережа. За такими ми не ходимо. |
TARGET_UNREACHABLE | 502 | Домен не існує або не відповідає. Це відповідь ПРО ЧУЖИЙ САЙТ, а не наша поломка. |
TARGET_TIMEOUT | 504 | Сайт не відповів за 10 секунд. |
TARGET_TOO_BIG | 413 | Сторінка більша за 5 МБ — далі ми не читаємо. |
TARGET_TOO_MANY_REDIRECTS | 502 | Ланцюжок переадресацій довший за п’ять кроків. |
OUR_BUDGET | 504 | Вийшов НАШ строк на весь прогін. Це не поломка сайту. |
QUOTA_EXCEEDED | 429 | Місячний обсяг тарифу вичерпано. Лічильник почнеться заново наступного місяця. |
API_QUOTA_EXCEEDED | 429 | Вичерпано місячний обсяг звернень саме ЗА КЛЮЧЕМ — він менший за обсяг перевірок. |
RATE_LIMIT_EXCEEDED | 429 | Годинна межа гостя. У ключа на оплаченому тарифі її немає — там рахує місячний обсяг. |
BATCH_TOO_LARGE | 422 | У списку більше адрес, ніж дозволяє тариф. Обсяг за це не списано. |
BATCH_BUSY | 429 | Уже виконуються два завдання сайту — дочекайтеся кінця одного з них. |
FILE_UNREADABLE | 422 | Файл прочитати не вдалося. Підходять CSV, XLSX і TXT. |
JOB_NOT_FOUND | 404 | Завдання немає: минув його строк (сім днів) або воно з іншого сайту. |
Межі й увічливість до чужих сайтів
Межі тарифу «Профі»: 30 000 перевірок на місяць, 5 000 звернень за ключем на місяць, 5 000 адрес в одному списку, обхід до 50 000 сторінок, п’ять ключів, історія 365 днів. Скільки лишилось — у полі limit.remaining кожної відповіді.
Межі ввічливості до ЧУЖОГО сайту не знімає жоден тариф — вони не про того, хто платить, а про того, кого перевіряють:
- не більше двох одночасних запитів до одного хоста і пауза 500 мс між ними;
- чужу сторінку чекаємо 10 секунд, читаємо перші 5 МБ, ідемо не більше ніж по п’яти переадресаціях;
- на всю одиночну перевірку відведено 18 секунд: не встигли — відповідь приходить чесно частковою (
partial), а не обірваною; - представляємося іменем
SeoGenCMS-Tools— за ним нас можна закрити у своємуrobots.txt; - одночасних завдань на сайт — два.
Перевіряйте чужі сайти з тією ж мірою, з якою хотіли б, щоб перевіряли ваш.