MCP для SEOParse

Підключіть власного AI-провайдера (Claude Code, Anthropic Messages API, VS Code, Gemini CLI) і керуйте аналізом контенту без інтерфейсу.

Що таке MCP

MCP — відкритий протокол, який дозволяє AI-клієнту (наприклад, Claude Code чи іншому асистенту) підключатися до зовнішнього сервісу як до набору «тулів» (дій) і «ресурсів» (даних для читання), без окремого UI. SEOParse піднімає власний MCP-сервер поруч з основним застосунком: кожен тул MCP відповідає рівно одному ендпоінту публічного REST API /api/v1, і обидва беруть схеми даних з одного джерела правди — реєстру тулів нижче.

Що це дає

  • AI-провайдер може читати URL, абзаци, речення, SERP-результати та конкурентів вашого сайту напряму.
  • Довгі операції (парсинг, SERP-аналіз, перезапис сторінки) запускаються й відстежуються через задачі (job_id) — без очікування у відкритому запиті.
  • Доступ обмежується персональним токеном зі scope'ами — AI бачить і може лише те, що дозволено і вашому обліковому запису, і самому токену.
  • Кожен виклик логується окремо від інтерфейсу, з наскрізним ідентифікатором запиту, — завжди можна простежити, що саме зробив AI-клієнт.

Як підключити

  1. Створіть персональний API-токен: Профіль → API Tokens. Оберіть потрібні scope'и (read/write/analyze/delete) — сирий секрет токена показується рівно один раз, збережіть його одразу. Видача токена (create_token) доступна лише через цю сторінку і REST напряму — це навмисно не тул MCP.
  2. Підключіть одного з клієнтів нижче до адреси MCP-сервера: https://seoparse.site/mcp.

Claude Code

claude mcp add --transport http seoparse https://seoparse.site/mcp --header "Authorization: Bearer <ВАШ_ТОКЕН>"

або файл .mcp.json:

{
  "mcpServers": {
    "seoparse": {
      "type": "http",
      "url": "https://seoparse.site/mcp",
      "headers": { "Authorization": "Bearer <ВАШ_ТОКЕН>" }
    }
  }
}

Anthropic Messages API (MCP connector)

{
  "mcp_servers": [
    { "type": "url", "url": "https://seoparse.site/mcp", "name": "seoparse", "authorization_token": "<ВАШ_ТОКЕН>" }
  ],
  "tools": [
    { "type": "mcp_toolset", "mcp_server_name": "seoparse" }
  ]
}

VS Code / Copilot

Файл .mcp.json (або ~/.copilot/mcp-config.json):

{
  "servers": {
    "seoparse": {
      "type": "http",
      "url": "https://seoparse.site/mcp",
      "headers": { "Authorization": "Bearer <ВАШ_ТОКЕН>" }
    }
  }
}

Gemini CLI

Файл ~/.gemini/settings.json:

{
  "mcpServers": {
    "seoparse": {
      "httpUrl": "https://seoparse.site/mcp",
      "headers": { "Authorization": "Bearer <ВАШ_ТОКЕН>" }
    }
  }
}

claude.ai / ChatGPT connectors (OAuth-підключення без ручного токена) — після впровадження OAuth (фаза 4 плану MCP).

Scopes і безпека

Ефективні права виклику завжди дорівнюють перетину прав вашого користувача і scope'ів токена: токен ніколи не підвищує роль і не обходить обмеження облікового запису (наприклад, заборону на парсинг). Доступні scope'и:

  • read — читання даних (URL, контент, SERP, задачі, токени).
  • write — зміни без витрати бюджету (видача токенів, скасування задач).
  • analyze — дії, що витрачають бюджет SERP/AI (Bright Data, AI-перезапис).
  • delete — незворотні дії (відкликання токенів тощо).

Деструктивні тули (позначені прапорцем «⚠️ Потребує confirm=true» у довіднику нижче) вимагають явного аргументу confirm: true — без нього виклик відхиляється помилкою confirm_required.

Задачі та прогрес

Довгі операції (парсинг, SERP-аналіз, перезапис сторінки) не блокують виклик — тул одразу повертає job_id. Прогрес і результат читаються тулами get_job / list_jobs (статус, лічильники, повідомлення поточного кроку). Скасування (cancel_job) — кооперативне: задача перевіряє прапорець скасування між кроками (URL/батчами), тож негайної миттєвої зупинки протокол не гарантує.

Квота, ліміти й помилки

Усі помилки API повертаються в одному форматі з кодом, повідомленням і ідентифікатором запиту:

HTTPКодЩо означає
401unauthorizedТокен відсутній, невалідний, відкликаний або прострочений.
403forbidden_scopeТокену бракує потрібного scope.
403forbidden_roleОбліковий запис не має потрібного права (наприклад, парсингу).
403forbidden_urlНемає доступу до вказаного URL.
404not_foundРесурс не знайдено.
422validation_errorНекоректні вхідні дані.
400confirm_requiredДеструктивна дія без confirm: true.
403quota_exceededВичерпано місячну SERP-квоту.
429rate_limitedПеревищено ліміт частоти запитів (заголовок Retry-After).
409job_conflictКонфлікт стану задачі.
502provider_errorВідмова Bright Data чи іншого AI-провайдера.
500internal_errorНеочікувана внутрішня помилка сервера.

Довідник тулів

Усього доступно тулів через MCP: 58. Кожен тул відповідає рівно одному ендпоінту /api/v1.

account

get_bright_data_balance

GET /api/v1/account/balance — REST-двійник цього тула

Поточний баланс акаунта Bright Data (доступно для parser+).

scope: read

Вхід:
  • force: boolean
Вихід:
  • balance: number
  • cached: boolean
  • fetched_at: string (date-time)

analysis

rescan_paragraph

POST /api/v1/paragraphs/{paragraph_id}/rescan — REST-двійник цього тула

Синхронний повторний SERP-аналіз абзацу — повний респлит (type=paragraph) або кожного вже виділеного речення окремо (type=sentences). Spends Bright Data budget.

scope: analyze Витрачає SERP/AI-бюджет

Вхід:
  • paragraph_id: integer (обов'язкове)
  • type: string
  • query_type: string
Вихід:
  • target_id: integer
  • requests_made: integer
  • is_unique: boolean
  • is_filtered: boolean
  • quota_remaining: integer

rescan_sentence

POST /api/v1/sentences/{sentence_id}/rescan — REST-двійник цього тула

Синхронний повторний SERP-аналіз одного речення. Spends Bright Data budget.

scope: analyze Витрачає SERP/AI-бюджет

Вхід:
  • sentence_id: integer (обов'язкове)
Вихід:
  • target_id: integer
  • requests_made: integer
  • is_unique: boolean
  • is_filtered: boolean
  • quota_remaining: integer

start_serp_analysis

POST /api/v1/jobs/serp — REST-двійник цього тула

Запускає SERP-аналіз URL або конкретних абзаців як фонову задачу з job_id/прогресом. Spends Bright Data budget; квота списується поступово, за фактично перевіреними реченнями.

scope: analyze Витрачає SERP/AI-бюджет

Вхід:
  • url_ids: integer[]
  • paragraph_ids: integer[]
  • only_unanalyzed: boolean
Вихід:
  • job_id: string
  • kind: string
  • sentences_planned: integer
  • quota_remaining_after: integer

content

get_analysis_status

GET /api/v1/urls/{url_id}/analysis-status — REST-двійник цього тула

Статус SERP-аналізу URL, порахований з БД (без залежності від сесії).

scope: read

Вихід:
  • url_id: integer
  • total_sentences: integer
  • analyzed: integer
  • unique: integer
  • filtered: integer
  • progress_pct: number
  • completed: boolean
  • active_job_id: string

get_competitors_summary

GET /api/v1/competitors/summary — REST-двійник цього тула

Швидка агрегована статистика конкурентів і нашого домену по всіх власних URL.

scope: read

Вхід:
  • domain: string
  • url_id: integer
Вихід:
  • total_competitors: integer
  • total_competitor_urls: integer
  • total_appearances: integer
  • top_3_appearances: integer
  • our_stats: OurDomainStatsOut

get_paragraph

GET /api/v1/paragraphs/{paragraph_id} — REST-двійник цього тула

Картка одного абзацу з повним текстом і статистикою речень.

scope: read

Вихід:
  • id: integer
  • url_id: integer
  • position: integer
  • tag_type: string
  • text: string
  • char_count: integer
  • word_count: integer
  • is_unique: boolean
  • is_filtered: boolean
  • uniqueness_percent: number
  • sentences: SentenceSummaryOut
  • last_analyzed: string (date-time)

get_paragraph_serp

GET /api/v1/paragraphs/{paragraph_id}/serp — REST-двійник цього тула

Останній SERP-результат абзацу з органічними результатами.

scope: read

Вихід:
  • query: string
  • timestamp: string (date-time)
  • is_original_empty: boolean
  • domain_matches_count: integer
  • exact_url_match: boolean
  • serp_url: string
  • organic_results: OrganicResultOut[]

get_sentence_serp

GET /api/v1/sentences/{sentence_id}/serp — REST-двійник цього тула

Повна історія SERP-сканувань одного речення.

scope: read

Вихід:
  • sentence_id: integer
  • history: SentenceSerpHistoryEntryOut[]

list_competitors

GET /api/v1/urls/{url_id}/competitors — REST-двійник цього тула

Домени-конкуренти, знайдені в SERP-результатах абзаців і речень URL.

scope: read

Вихід:
  • items: CompetitorOut[]
  • total: integer

list_paragraphs

GET /api/v1/urls/{url_id}/paragraphs — REST-двійник цього тула

Список абзаців URL зі статусами унікальності/фільтрації (пагінований).

scope: read

Вхід:
  • url_id: integer (обов'язкове)
  • page: integer
  • per_page: integer
  • include_text: boolean
  • text_max_chars: integer
  • only_non_unique: boolean
Вихід:
  • items: ParagraphOut[]
  • total: integer
  • page: integer
  • per_page: integer

list_sentences

GET /api/v1/paragraphs/{paragraph_id}/sentences — REST-двійник цього тула

Речення абзацу з коротким SERP-підсумком кожного речення.

scope: read

Вихід:
  • items: SentenceOut[]
  • total: integer

gsc

disconnect_gsc

POST /api/v1/gsc/disconnect — REST-двійник цього тула

Відключає Google Search Console — видаляє збережене підключення.

scope: delete Потребує confirm=true

Вхід:
  • confirm: boolean (обов'язкове)
Вихід:
  • disconnected: boolean

get_gsc_connection

GET /api/v1/gsc/connection — REST-двійник цього тула

Стан підключення до Google Search Console і посилання на ручний consent.

scope: read

Вихід:
  • connected: boolean
  • property: string
  • last_sync_at: string (date-time)
  • connect_url: string

import_gsc_csv

POST /api/v1/gsc/import — REST-двійник цього тула

Імпортує GSC Pages.csv (текстом) у пріоритезований пакет сторінок.

scope: write

Вхід:
  • csv_text: string (обов'язкове)
  • property: string
Вихід:
  • batch_id: string
  • rows_imported: integer
  • rows_skipped: integer

list_gsc_priority

GET /api/v1/gsc/priority — REST-двійник цього тула

Впорядкований за пріоритетом список сторінок GSC (striking distance).

scope: read

Вхід:
  • batch_id: string
  • page: integer
  • per_page: integer
Вихід:
  • items: GscPriorityItemOut[]
  • total: integer
  • batch_id: string

queue_gsc_pages

POST /api/v1/gsc/queue — REST-двійник цього тула

Ставить вибрані сторінки GSC у чергу — створює URL, готові для start_parse.

scope: write

Вхід:
  • page_ids: integer[] (обов'язкове)
  • serp_settings: GscSerpSettingsIn
Вихід:
  • url_ids: integer[]
  • created: integer[]
  • existing: integer[]
  • rejected: GscQueueRejectedOut[]

select_gsc_property

POST /api/v1/gsc/select-property — REST-двійник цього тула

Обирає GSC-властивість для підключеного акаунту.

scope: write

Вхід:
  • property: string (обов'язкове)
Вихід:
  • connected: boolean
  • property: string
  • last_sync_at: string (date-time)
  • connect_url: string

sync_gsc

POST /api/v1/gsc/sync — REST-двійник цього тула

Завантажує живі метрики з Google Search Console у новий пакет.

scope: write

Вхід:
  • days: integer
Вихід:
  • rows_upserted: integer
  • window_from: string (date)
  • window_to: string (date)

health

jobs

cancel_job

POST /api/v1/jobs/{job_id}/cancel — REST-двійник цього тула

Запитує кооперативне скасування задачі (потребує confirm=true). Не гарантує миттєву зупинку — задача перевіряє прапорець між кроками.

scope: write Потребує confirm=true

Вхід:
  • job_id: string (обов'язкове)
  • confirm: boolean (обов'язкове)
Вихід:
  • id: string
  • kind: string
  • status: string
  • progress: JobProgressOut
  • result: object
  • error: string
  • url_ids: integer[]
  • created_at: string (date-time)
  • started_at: string (date-time)
  • finished_at: string (date-time)
  • heartbeat_at: string (date-time)
  • cancel_requested: boolean

get_job

GET /api/v1/jobs/{job_id} — REST-двійник цього тула

Стан однієї фонової задачі — статус, прогрес, результат або помилка.

scope: read

Вихід:
  • id: string
  • kind: string
  • status: string
  • progress: JobProgressOut
  • result: object
  • error: string
  • url_ids: integer[]
  • created_at: string (date-time)
  • started_at: string (date-time)
  • finished_at: string (date-time)
  • heartbeat_at: string (date-time)
  • cancel_requested: boolean

list_jobs

GET /api/v1/jobs — REST-двійник цього тула

Список власних фонових задач (парсинг/SERP/рерайт) з фільтрами за статусом і типом.

scope: read

Вхід:
  • status: string
  • kind: string
  • page: integer
  • per_page: integer
  • all: boolean
Вихід:
  • items: JobOut[]
  • total: integer
  • page: integer
  • per_page: integer

manage

delete_url

DELETE /api/v1/urls/{url_id} — REST-двійник цього тула

Незворотно видаляє URL і всі повʼязані дані аналізу (потребує confirm=true).

scope: delete Потребує confirm=true

Вхід:
  • url_id: integer (обов'язкове)
  • confirm: boolean (обов'язкове)
Вихід:
  • url_id: integer
  • deleted: boolean

export_url

GET /api/v1/urls/{url_id}/export — REST-двійник цього тула

Експортує повну HTML-сторінку аналізу URL (те саме, що /export/export_page).

scope: read

Вхід:
  • url_id: integer (обов'язкове)
  • format: string
Вихід:
  • filename: string
  • content_type: string
  • content: string
  • content_base64: string

get_ignored_domains

GET /api/v1/urls/{url_id}/ignored-domains — REST-двійник цього тула

Список доменів, ігнорованих під час SERP-аналізу цього URL.

scope: read

Вхід:
  • url_id: integer (обов'язкове)
Вихід:
  • url_id: integer
  • ignored_domains: string[]

regenerate_export_password

POST /api/v1/urls/{url_id}/export-password — REST-двійник цього тула

Генерує новий пароль для захищеного публічного експорту URL (старий перестає діяти).

scope: write

Вхід:
  • url_id: integer (обов'язкове)
Вихід:
  • url_id: integer
  • password: string
  • export_url: string

set_ignored_domains

PUT /api/v1/urls/{url_id}/ignored-domains — REST-двійник цього тула

Замінює список ігнорованих доменів URL; повідомляє, чи потрібен повторний аналіз.

scope: write

Вхід:
  • url_id: integer (обов'язкове)
  • ignored_domains: string[]
Вихід:
  • url_id: integer
  • ignored_domains: string[]
  • need_reanalysis: boolean

toggle_favorite

POST /api/v1/urls/{url_id}/favorite — REST-двійник цього тула

Перемикає стан "обране" для URL поточного користувача.

scope: write

Вхід:
  • url_id: integer (обов'язкове)
Вихід:
  • url_id: integer
  • is_favorite: boolean

me

get_me

GET /api/v1/me — REST-двійник цього тула

Профіль поточного користувача, стан квоти та дані токена.

scope: read

Вихід:
  • user_id: integer
  • username: string
  • email: string
  • role: string
  • can_parse: boolean
  • quota: MeQuotaOut
  • token: MeTokenOut

parse

check_serp_settings

POST /api/v1/urls/{url_id}/serp-settings/check — REST-двійник цього тула

Dry-run порівняння нових SERP-налаштувань зі збереженими для URL.

scope: read

Вхід:
  • url_id: integer (обов'язкове)
  • serp_settings: SerpSettingsIn (обов'язкове)
Вихід:
  • diff: SerpSettingsDiffItemOut[]
  • need_reanalysis: boolean

collect_urls

POST /api/v1/urls — REST-двійник цього тула

Додає URL без веб-інтерфейсу: створює/оновлює URL, SERP-налаштування, ігноровані домени та повертає url_id кожного рядка.

scope: write

Вхід:
  • urls: string[] (обов'язкове)
  • ignored_domains: string[]
  • serp_settings: SerpSettingsIn
Вихід:
  • items: CollectUrlsItemOut[]
  • rejected: CollectUrlsRejectedOut[]

start_parse

POST /api/v1/jobs/parse — REST-двійник цього тула

Запускає парсинг (або повний репарсинг) URL як фонову задачу. Spends Bright Data/Playwright budget. Reparse=true requires confirm=true.

scope: analyze Витрачає SERP/AI-бюджет Потребує confirm=true

Вхід:
  • url_ids: integer[] (обов'язкове)
  • reparse: boolean
  • confirm: boolean
  • serp_settings: SerpSettingsIn
Вихід:
  • job_id: string
  • kind: string
  • url_ids: integer[]
  • status: string

rewrite

generate_sentence_rewrites

POST /api/v1/sentences/{sentence_id}/rewrite — REST-двійник цього тула

Генерує 3 AI-варіанти перепису неунікального речення. Spends AI budget. force=false повертає кеш без нового виклику, якщо він є.

scope: analyze Витрачає SERP/AI-бюджет

Вхід:
  • sentence_id: integer (обов'язкове)
  • force: boolean
Вихід:
  • items: RewriteVariantOut[]
  • cached: boolean

list_sentence_rewrites

GET /api/v1/sentences/{sentence_id}/rewrites — REST-двійник цього тула

Читає збережені варіанти перепису речення без AI-виклику.

scope: read

Вхід:
  • sentence_id: integer (обов'язкове)
Вихід:
  • items: RewriteVariantOut[]
  • cached: boolean

rewrite_paragraph

POST /api/v1/paragraphs/{paragraph_id}/rewrite — REST-двійник цього тула

Переписує одним AI-запитом усі неунікальні речення абзацу. Spends AI budget. skip_existing=true (дефолт) не викликає AI повторно для вже покритого абзацу.

scope: analyze Витрачає SERP/AI-бюджет

Вхід:
  • paragraph_id: integer (обов'язкове)
  • skip_existing: boolean
Вихід:
  • paragraph_id: integer
  • sentences_rewritten: integer
  • total_non_unique: integer
  • items: RewriteVariantOut[]

start_page_rewrite

POST /api/v1/jobs/rewrite — REST-двійник цього тула

Запускає повносторінковий AI-рерайт неунікальних речень як фонову задачу. Spends AI budget (найбільша витрата серед rewrite-тулів).

scope: analyze Витрачає SERP/AI-бюджет

Вхід:
  • url_id: integer (обов'язкове)
  • skip_existing: boolean
Вихід:
  • job_id: string
  • kind: string
  • status: string

verify_rewrite

POST /api/v1/rewrites/{rewrite_id}/verify — REST-двійник цього тула

SERP-верифікація обраного варіанта перепису. Spends SERP quota budget (лише для нової перевірки — кешований результат нічого не списує).

scope: analyze Витрачає SERP/AI-бюджет

Вхід:
  • rewrite_id: integer (обов'язкове)
Вихід:
  • rewrite_id: integer
  • is_unique: boolean
  • is_verified: boolean
  • requests_made: integer
  • quota_remaining: object

rewrite_manage

apply_rewrite

POST /api/v1/rewrites/{rewrite_id}/apply — REST-двійник цього тула

Застосовує варіант перепису для його речення (знімає застосування з інших варіантів того самого речення).

scope: write

Вхід:
  • rewrite_id: integer (обов'язкове)
Вихід:
  • rewrite_id: integer
  • sentence_id: integer
  • is_applied: boolean
  • rating: integer
  • text: string

clear_applied_rewrites

POST /api/v1/urls/{url_id}/rewrites/clear-applied — REST-двійник цього тула

Знімає застосування з УСІХ варіантів перепису на URL (потребує confirm=true). Не видаляє самі варіанти.

scope: delete Потребує confirm=true

Вхід:
  • url_id: integer (обов'язкове)
  • confirm: boolean (обов'язкове)
Вихід:
  • url_id: integer
  • cleared: integer

edit_rewrite

PATCH /api/v1/rewrites/{rewrite_id} — REST-двійник цього тула

Редагує текст варіанту перепису вручну (1-2000 символів).

scope: write

Вхід:
  • rewrite_id: integer (обов'язкове)
  • rewritten_text: string (обов'язкове)
Вихід:
  • rewrite_id: integer
  • sentence_id: integer
  • is_applied: boolean
  • rating: integer
  • text: string

export_rewrite_draft

GET /api/v1/urls/{url_id}/draft/export — REST-двійник цього тула

Експортує чорновик сторінки як txt або html файл (текст у JSON; REST підтримує ?download=1).

scope: read

Вхід:
  • url_id: integer (обов'язкове)
  • format: string (обов'язкове)
Вихід:
  • filename: string
  • content_type: string
  • content: string

export_rewrites_csv

GET /api/v1/urls/{url_id}/rewrites/export.csv — REST-двійник цього тула

Експортує таблицю всіх варіантів перепису URL як CSV (текст у JSON; REST підтримує ?download=1).

scope: read

Вхід:
  • url_id: integer (обов'язкове)
Вихід:
  • filename: string
  • content_type: string
  • content: string

get_rewrite_draft

GET /api/v1/urls/{url_id}/draft — REST-двійник цього тула

Зібраний чорновик сторінки з підставленими застосованими варіантами перепису.

scope: read

Вхід:
  • url_id: integer (обов'язкове)
Вихід:
  • url_id: integer
  • sections: DraftSectionOut[]
  • applied_count: integer
  • generated_at: string (date-time)

rate_rewrite

POST /api/v1/rewrites/{rewrite_id}/rate — REST-двійник цього тула

Оцінює якість варіанту перепису: -1 (погано), 0 (нейтрально) або 1 (добре).

scope: write

Вхід:
  • rewrite_id: integer (обов'язкове)
  • rating: integer (обов'язкове)
Вихід:
  • rewrite_id: integer
  • sentence_id: integer
  • is_applied: boolean
  • rating: integer
  • text: string

unapply_rewrite

DELETE /api/v1/rewrites/{rewrite_id}/apply — REST-двійник цього тула

Скасовує застосування варіанту перепису (речення повертається до оригінального тексту в чорновику).

scope: write

Вхід:
  • rewrite_id: integer (обов'язкове)
Вихід:
  • rewrite_id: integer
  • sentence_id: integer
  • is_applied: boolean
  • rating: integer
  • text: string

rules

create_parsing_rule

POST /api/v1/parsing-rules — REST-двійник цього тула

Створює правило виключення тегів/класів для домену при парсингу.

scope: write

Вхід:
  • domain: string (обов'язкове)
  • exclude_tags: string
  • exclude_classes: string
Вихід:
  • id: integer
  • domain: string
  • exclude_tags: string
  • exclude_classes: string
  • owner_user_id: integer
  • created_at: string (date-time)

delete_parsing_rule

DELETE /api/v1/parsing-rules/{rule_id} — REST-двійник цього тула

Незворотно видаляє власне правило виключення парсингу.

scope: delete Потребує confirm=true

Вхід:
  • rule_id: integer (обов'язкове)
  • confirm: boolean (обов'язкове)
Вихід:
  • deleted: boolean
  • rule_id: integer

list_parsing_rules

GET /api/v1/parsing-rules — REST-двійник цього тула

Список правил виключення парсингу: власні для parser, усі для timlid/superuser.

scope: read

Вихід:
  • items: ParsingRuleOut[]
  • total: integer

update_parsing_rule

PATCH /api/v1/parsing-rules/{rule_id} — REST-двійник цього тула

Оновлює виключені теги/класи власного правила (домен незмінний).

scope: write

Вхід:
  • rule_id: integer (обов'язкове)
  • exclude_tags: string
  • exclude_classes: string
Вихід:
  • id: integer
  • domain: string
  • exclude_tags: string
  • exclude_classes: string
  • owner_user_id: integer
  • created_at: string (date-time)

tokens

list_tokens

GET /api/v1/tokens — REST-двійник цього тула

Список власних API-токенів (без сирих секретів).

scope: read

Вихід:
  • items: TokenOut[]
  • total: integer

revoke_token

POST /api/v1/tokens/{token_id}/revoke — REST-двійник цього тула

Відкликає власний API-токен (потребує confirm=true).

scope: delete Потребує confirm=true

Вхід:
  • confirm: boolean (обов'язкове)
Вихід:
  • id: integer
  • prefix: string
  • name: string
  • scopes: string[]
  • kind: string
  • created_at: string (date-time)
  • last_used_at: string (date-time)
  • expires_at: string (date-time)
  • revoked_at: string (date-time)

urls

get_content_structure

GET /api/v1/urls/{url_id}/structure — REST-двійник цього тула

Ієрархічна структура контенту сторінки.

scope: read

Вихід:
  • url_id: integer
  • url: string
  • structure: object

get_page_metadata

GET /api/v1/urls/{url_id}/metadata — REST-двійник цього тула

SEO-метадані сторінки: title, h1, description, canonical, hreflang.

scope: read

Вихід:
  • url_id: integer
  • title: string
  • h1: string
  • language: string
  • description: string
  • canonical: string
  • total_words: integer
  • total_chars: integer
  • updated_at: string (date-time)
  • alternate_links: AlternateLinkOut[]

get_tag_stats

GET /api/v1/urls/{url_id}/tag-stats — REST-двійник цього тула

Агрегована статистика вмісту за типами HTML-тегів.

scope: read

Вихід:
  • url_id: integer
  • items: TagStatOut[]
  • total_tags: integer

get_url

GET /api/v1/urls/{url_id} — REST-двійник цього тула

Картка URL: статистика, SERP-налаштування, ігноровані домени.

scope: read

Вихід:
  • id: integer
  • url: string
  • domain: string
  • path: string
  • is_parsed: boolean
  • last_parsed: string (date-time)
  • created_at: string (date-time)
  • owner_user_id: integer
  • is_favorite: boolean
  • stats: UrlStatsOut
  • serp_settings: SerpSettingsOut
  • ignored_domains: string[]
  • metadata_present: boolean

list_favorites

GET /api/v1/favorites — REST-двійник цього тула

Список обраних URL поточного користувача.

scope: read

Вихід:
  • items: FavoriteOut[]
  • total: integer

list_urls

GET /api/v1/urls — REST-двійник цього тула

Список URL з фільтрами й пагінацією — те саме, що показує /all_urls.

scope: read

Вхід:
  • page: integer
  • per_page: integer
  • domain: string
  • is_parsed: string
  • uniqueness_op: string
  • uniqueness_val: integer
  • filtered_op: string
  • filtered_val: integer
  • date_from: string (date)
  • date_to: string (date)
  • search: string
  • only_favorites: string
  • user_id: integer
Вихід:
  • items: UrlSummaryOut[]
  • total: integer
  • page: integer
  • per_page: integer

search_domains

GET /api/v1/domains — REST-двійник цього тула

Автопідказка доменів за підрядком (максимум 10).

scope: read

Вхід:
  • search: string
Вихід:
  • items: string[]