Документація API

Адреса API: https://2index.ninja/api/v1/

Для виконання запиту до API потрібно передати Bearer токен доступу в заголовку Authorization.

curl https://2index.ninja/api/v1/account -H "Authorization: Bearer API_TOKEN"

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

У відповіді на кожен запит присутній параметр success, за яким визначається успішність запиту. Параметр errors містить повідомлення про помилки.

У деяких випадках, якщо повертатиметься помилка 403, необхідно вказати user-agent, наприклад:

curl https://2index.ninja/api/v1/account -H "Authorization: Bearer API_TOKEN" -A "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/123.0.0.0 Safari/537.36"

Запити можуть бути обмежені з боку хостингу, у цьому випадку ми рекомендуємо використовувати проксі.

Методи для роботи з акаунтом

Реєстрація користувача

Виконайте POST запит за адресою register

POST https://2index.ninja/api/v1/register

Параметри запиту:

Поле Тип Обов'язково Опис
email string так Email користувача у форматі [email protected]
source string ні Джерело реєстрації, за замовчуванням api. Може бути, наприклад, wordpress_plugin.

Приклади відповідей:

Успішна реєстрація:

{
    "success": true,
    "message": "User registered successfully!",
    "account": {
        "email": "[email protected]",
        "tariff": "White Ninja",
        "available_projects": 1,
        "balance": 100.0,
        "available_links": 100,
        "available_indexation_check_links": 500,
        "link_sending_speed": 100,
        "available_link_sending_speed": 100,
        "tariff_available": true,
        "tariff_expiring_date": "2025-01-16T14:26:11.700740Z",
        "email_verified": false,
        "link_cost": "$0.00056",
        "api_key": "API_KEY"
    }
}

Можливі помилки:

Помилка валідації:

{
    "errors": {
        "email": ["The email field is required."]
    }
}

Email уже зареєстрований:

{
    "message": "The email has already been taken."
}

Після успішної реєстрації на вказаний email буде надіслано лист для активації акаунта.

Отримати дані акаунта

Потрібно виконати GET запит за адресою account

GET https://2index.ninja/api/v1/account

У відповідь будуть отримані дані у форматі JSON:

{
    "success": true,
    "account": {
        "email": "[email protected]",
        "tariff": "White Ninja",
        "balance": 100.0,
        "available_projects": 1,
        "available_links": 100,
        "available_indexation_check_links": 500,
        "link_sending_speed": 100,
        "available_link_sending_speed": 45,
        "tariff_available": true,
        "tariff_expiring_date": "2025-01-16T14:26:11.000000Z",
        "email_verified": false,
        "link_cost": "$0.00056"
    }
}

Де:

Поле Опис
link_sending_speed Ліміт швидкості відправки посилань за тарифом (загалом на акаунт за добу).
available_link_sending_speed Залишок швидкості — link_sending_speed мінус сума indexing_speed за всіма проєктами. Тобто скільки ще можна призначити новим або наявним проєктам без перевищення ліміту.

Методи для роботи з проєктами

Отримати список проєктів

Потрібно виконати GET запит за адресою project

GET https://2index.ninja/api/v1/project

Пагінація (необов'язково)

За замовчуванням (без параметрів) повертаються всі не-архівні проєкти користувача — поведінка збережена для зворотної сумісності.

Якщо передано параметр page, відповідь переключається в режим пагінації і додатково містить блок pagination.

Параметр Тип Обов'язково Опис
page integer ні Номер сторінки. Якщо не передано — повертаються всі проєкти.
per_page integer ні Розмір сторінки. Приймається тільки разом із page. За замовчуванням 20, допустимий діапазон 1…100 (значення поза діапазоном обрізаються).

Приклад запиту з пагінацією:

GET https://2index.ninja/api/v1/project?page=2&per_page=10

У відповідь будуть отримані дані у форматі JSON:

{
    "success": true,
    "projects": [
        {
            "id": 1,
            "name": "Project name",
            "type": "indexing",
            "website": "https://domain.com/",
            "status": "in progress",
            "created_at": "2024-03-01 14:34:56",
            "links_type": "internal",
            "google_account_access_granted": 0,
            "links_total": 500,
            "links_sending_speed": 400,
            "links_sent_google": 100,
            "links_sent_yandex": 40,
            "links_sent_bing": 100,
            "in_queue": 360,
            "sent_links": 100,
            "indexed": 30,
            "not_indexed": 0,
            "download_queue_url": "DOWNLOAD_QUEUE_URL",
            "download_sent_url": "DOWNLOAD_SENT_URL",
            "download_indexed_url": "DOWNLOAD_INDEXED_URL",
            "download_unindexed_url": "DOWNLOAD_UNINDEXED_URL"
        },
        {
            "id": "2",
            "name": "Project 2 name",
            "type": "indexing_check",
            "status": "in progress",
            "created_at": "2024-03-01 14:34:56",
            "links_total": 200,
            "links_checking_speed": 100,
            "in_queue": 100,
            "checked": 100,
            "indexed": 70,
            "not_indexed": 30,
            "download_queue_url": "DOWNLOAD_QUEUE_URL",
            "download_indexed_url": "DOWNLOAD_INDEXED_URL",
            "download_unindexed_url": "DOWNLOAD_UNINDEXED_URL",
            "download_all_url": "DOWNLOAD_ALL_URL",
            "download_checked_url": "DOWNLOAD_CHECKED_URL",
        }
        ...
    ]
}

У режимі пагінації (коли передано page) відповідь містить додатковий блок pagination:

{
    "success": true,
    "projects": [ ... ],
    "pagination": {
        "current_page": 2,
        "last_page": 5,
        "per_page": 10,
        "total": 47
    }
}

Отримати дані проєкту

Потрібно виконати GET запит за адресою project/{project_id}

GET https://2index.ninja/api/v1/project/1

У відповідь будуть отримані дані у форматі JSON:

  • Для проєкту індексації:
{
    "success": true,
    "project": {
        "id": 1,
        "name": "Project name",
        "type": "indexing",
        "website": "https://domain.com/",
        "status": "in progress",
        "created_at": "2024-03-01 14:34:56",
        "links_type": "internal",
        "google_account_access_granted": 0,
        "links_total": 500,
        "links_sending_speed": 400,
        "links_sent_google": 100,
        "links_sent_yandex": 40,
        "links_sent_bing": 100,
        "in_queue": 360,
        "sent_links": 100,
        "indexed": 30,
        "not_indexed": 0,
        "download_queue_url": "DOWNLOAD_QUEUE_URL",
        "download_sent_url": "DOWNLOAD_SENT_URL",
        "download_indexed_url": "DOWNLOAD_INDEXED_URL",
        "download_unindexed_url": "DOWNLOAD_UNINDEXED_URL"
    }
}
  • Для проєкту перевірки індексації:
{
    "success": true,
    "project": {
        "id": "2",
        "name": "Project 2 name",
        "type": "indexing_check",
        "status": "in progress",
        "created_at": "2024-03-01 14:34:56",
        "links_total": 200,
        "links_checking_speed": 100,
        "in_queue": 100,
        "checked": 100,
        "indexed": 70,
        "not_indexed": 30,
        "download_queue_url": "DOWNLOAD_QUEUE_URL",
        "download_indexed_url": "DOWNLOAD_INDEXED_URL",
        "download_unindexed_url": "DOWNLOAD_UNINDEXED_URL",
        "download_all_url": "DOWNLOAD_ALL_URL",
        "download_checked_url": "DOWNLOAD_CHECKED_URL"
    }
}

Створити проєкт

Потрібно виконати POST запит за адресою project

POST https://2index.ninja/api/v1/project

Параметри запиту:

Поле Тип Обов'язково Опис
name string так Назва проєкту
website string так* Адреса сайту у форматі https://site.domain/.
*Обов'язкове якщо тип проєкту: indexing
for_external_links boolean ні Проєкт для зовнішніх посилань. Якщо не вказано, буде тільки для внутрішніх.
indexing_speed integer ні** Швидкість індексації проєкту, якщо не вказано буде застосована вся доступна швидкість на акаунті. Використовується для проєктів з типом indexing. Для проєктів з типом indexing_check використовується checking_speed
checking_speed integer ні** Швидкість перевірки посилань проєкту, якщо не вказано буде застосована вся доступна швидкість на акаунті. Використовується для проєктів з типом indexing_check. Для проєктів з типом indexing використовується indexing_speed
type string ні Тип проєкту.
Можливі варіанти: indexing — індексація посилань, indexing_check — перевірка індексації посилань.
Якщо не вказано — створить проєкт індексації посилань indexing

** При створенні проєкту будь-якого типу можна використовувати будь-який із параметрів indexing_speed і checking_speed — вони є аліасами один одного, але якщо передано обидва, буде використано indexing_speed.

У відповідь будуть отримані дані у форматі JSON:

{
    "success": true,
    "message": "The project has been successfully created"
}

Приклад створення проєкту індексації посилань: POST https://2index.ninja/api/v1/project

name: Project 1
website: https://website.com
for_external_links: 1
indexing_speed: 100

Приклад створення проєкту перевірки індексації посилань: POST https://2index.ninja/api/v1/project

name: Project 2
checking_speed: 100

Створити (отримати) проєкт для плагіна Wordpress

Знаходить проєкт, прив'язаний до сайту на WordPress. Якщо такого проєкту немає, створює новий.

Потрібно виконати POST запит за адресою account/get_wordpress_project

POST https://2index.ninja/api/v1/account/get_wordpress_project

Параметри запиту:

Поле Тип Обов'язково Опис
website string так Адреса сайту у форматі https://site.domain/

У результаті запиту буде знайдено проєкт користувача із зазначеною адресою сайту або створено новий для зазначеного сайту. У новому проєкті буде вказана індексація внутрішніх посилань, а швидкість відправки буде обрана максимальна.

Для існуючого проєкту у відповідь будуть отримані дані у форматі JSON:

{
    "success": true,
    "message": "Found existing project domain.com",
    "project": {
        "id": 1,
        "name": "Project name",
        "website": "https://domain.com/",
        "status": "in progress",
        "created_at": "2024-03-01 14:34:56",
        "links_type": "internal",
        "google_account_access_granted": 0,
        "links_total": 500,
        "links_sending_speed": 400,
        "links_sent_google": 100,
        "links_sent_yandex": 40,
        "links_sent_bing": 100,
        "in_queue": 360,
        "sent_links": 100,
        "indexed": 30,
        "not_indexed": 0,
        "download_queue_url": "DOWNLOAD_QUEUE_URL",
        "download_sent_url": "DOWNLOAD_SENT_URL",
        "download_indexed_url": "DOWNLOAD_INDEXED_URL",
        "download_unindexed_url": "DOWNLOAD_UNINDEXED_URL"
    }
}

Для нового проєкту у відповідь будуть отримані дані у форматі JSON:

{
    "success": true,
    "message": "The project has been successfully created",
    "project": {
        "id": 1,
        "name": "Project name",
        "website": "https://domain.com/",
        "status": "in progress",
        "created_at": "2024-03-01 14:34:56",
        "links_type": "internal",
        "google_account_access_granted": 0,
        "links_total": 500,
        "links_sending_speed": 400,
        "links_sent_google": 100,
        "links_sent_yandex": 40,
        "links_sent_bing": 100,
        "in_queue": 360,
        "sent_links": 100,
        "indexed": 30,
        "not_indexed": 0,
        "download_queue_url": "DOWNLOAD_QUEUE_URL",
        "download_sent_url": "DOWNLOAD_SENT_URL",
        "download_indexed_url": "DOWNLOAD_INDEXED_URL",
        "download_unindexed_url": "DOWNLOAD_UNINDEXED_URL"
    }
}

Очистити чергу індексації

Потрібно виконати POST запит за адресою project/{project_id}/clear_queue

POST https://2index.ninja/api/v1/project/1/clear_queue

У відповідь будуть отримані дані у форматі JSON:

{
    "success": true,
    "message": "The indexing queue has been cleared successfully. X links have been removed"
}

Або буде повернуто відповідне повідомлення про помилку:

{
    "success": false,
    "errors": ["Project not found"]
}

Обнулити швидкість завершених проєктів

Масова операція — встановлює indexing_speed = 0 для всіх завершених (completed) проєктів користувача. Корисно, коли після масового завершення проєктів потрібно вивільнити зайняту швидкість, не архівуючи їх.

Потрібно виконати POST запит за адресою project/reset_speed_completed:

POST https://2index.ninja/api/v1/project/reset_speed_completed

Без параметрів — впливає на всі завершені проєкти користувача з indexing_speed > 0. Усі параметри-фільтри опціональні; дати передаються у форматі Y-m-d.

Поле Тип Обов'язково Опис
created_at_from string ні Дата створення проєкту, нижня межа (Y-m-d).
created_at_to string ні Дата створення проєкту, верхня межа (Y-m-d).
completed_at_from string ні Дата переходу в completed, нижня межа.
completed_at_to string ні Дата переходу в completed, верхня межа.

У відповідь будуть отримані дані у форматі JSON:

{
    "success": true,
    "message": "Speed reset for 5 projects",
    "affected_projects": 5
}

У разі невалідного формату дати:

{
    "success": false,
    "errors": {
        "completed_at_from": ["The completed at from field must match the format Y-m-d."]
    }
}

Архівувати завершені проєкти

Масова операція — переводить усі завершені (completed) проєкти користувача в archived, обнулюючи їхню швидкість. Корисно для пакетного «закриття» завершених проєктів без поштучних запитів.

Потрібно виконати POST запит за адресою project/archive_completed:

POST https://2index.ninja/api/v1/project/archive_completed

Приймає ті самі опціональні фільтри за діапазонами дат, що й reset_speed_completed:

Поле Тип Обов'язково Опис
created_at_from string ні Дата створення проєкту, нижня межа (Y-m-d).
created_at_to string ні Дата створення проєкту, верхня межа (Y-m-d).
completed_at_from string ні Дата переходу в completed, нижня межа.
completed_at_to string ні Дата переходу в completed, верхня межа.

У відповідь будуть отримані дані у форматі JSON:

{
    "success": true,
    "message": "5 projects have been archived",
    "archived_count": 5
}

Методи для роботи з посиланнями

Додати посилання

Потрібно виконати POST запит за адресою link/add

POST https://2index.ninja/api/v1/link/add

Параметри запиту:

Поле Обов'язково Опис
project_id так ID проєкту
links так Список посилань. Можна передати у вигляді масиву посилань або у вигляді тексту (кожне посилання окремим рядком)
google ні, за умови yandex або bing Надсилати посилання в Google
yandex ні, за умови google або bing Надсилати посилання в Yandex
bing ні, за умови google або yandex Надсилати посилання в Bing
google_access_granted ні Надано доступ до акаунта Google

У відповідь будуть отримані дані у форматі JSON:

{
    "success": true,
    "message": "Links have been successfully added to the project"
}

Якщо у списку будуть помилкові посилання, посилання не будуть додані, у відповідь буде отримано відповідне повідомлення про помилку:

{
    "success": false,
    "errors": ["You sent invalid links"],
    "invalid_links": ["http://wrong.link"]
}

Для проєктів перевірки індексації посилання додаються так само як і для індексації, google_access_granted — не обов'язково передавати, буде ігноруватися. Пошукові системи потрібно вказати, але наразі доступна перевірка лише в google.

Додати посилання за назвою проєкту

Потрібно виконати POST запит за адресою link/add_simple. Якщо проєкту з вказаним іменем не існує, він буде створений автоматично з максимальною швидкістю відправки.

POST https://2index.ninja/api/v1/link/add_simple

Параметри запиту:

Поле Обов'язково Опис
project_name ні Назва проєкту. Якщо не вказано, буде створено проєкт з іменем "default".
links так Список посилань. Можна передати масивом або текстом (кожне посилання з нового рядка).
google ні, якщо вказано yandex або bing Надсилати посилання в Google.
yandex ні, якщо вказано google або bing Надсилати посилання в Yandex.
bing ні, якщо вказано google або yandex Надсилати посилання в Bing.
google_access_granted ні Надано доступ до акаунта Google.

Для проєктів перевірки індексації посилання додаються так само як і для індексації, google_access_granted — не обов'язково передавати, буде ігноруватися. Пошукові системи потрібно вказати, але наразі доступна перевірка лише в google.

Приклад запиту:

{
    "project_name": "My Website",
    "links": ["https://example.com/page1", "https://example.com/page2"],
    "google": true,
    "yandex": false,
    "bing": true,
    "google_access_granted": false
}

Відповідь у разі успіху:

{
    "success": true,
    "message": "Links have been successfully added to the project",
    "project_name": "My Website",
    "project_id": 12345
}

Можливі помилки:

  • Якщо у списку будуть помилкові посилання:
{
    "success": false,
    "errors": ["You sent invalid links"],
    "invalid_links": ["http://wrong.link"]
}
  • Якщо сталася помилка під час створення проєкту:
{
    "success": false,
    "errors": ["Failed to create the project"]
}

Перевірити статус посилання

Виконайте POST запит за адресою /api/v1/link/status

POST https://2index.ninja/api/v1/link/status

Параметри запиту:

Поле Обов'язково Опис
project_id так ID проєкту
link так Посилання, що перевіряється
  • При успішному запиті у відповідь буде отримано json об'єкт:
{
    "success": true,
    "link": {
        "id": 34368960,
        "url": "https://2index.ninja/",
        "google": "Sent",
        "yandex": "Sent",
        "bing": "Sent",
        "is_external": 1,
        "google_sent": "2025-08-24 20:10:02",
        "yandex_sent": "2025-08-24 20:45:02",
        "bing_sent": "2025-08-24 20:05:05",
        "google_sent_attempts": 1,
        "yandex_sent_attempts": 1,
        "bing_sent_attempts": 1,
        "google_indexed": 1,
        "google_indexing_check_date": "2025-08-29"
    }
}

Де:

Поле Опис
id ID посилання
url Посилання
google * Статус відправки в Google
yandex * Статус відправки в Yandex
bing * Статус відправки в Bing
is_external Зовнішнє посилання
google_sent Дата відправки в Google
yandex_sent Дата відправки в Yandex
bing_sent Дата відправки в Bing
google_sent_attempts К-сть спроб відправки в Google
yandex_sent_attempts К-сть спроб відправки в Yandex
bing_sent_attempts К-сть спроб відправки в Bing
google_indexed Проіндексовано в Google
google_indexing_check_date Дата перевірки індексації в Google

* Можливі статуси:

Статус Значення
New Нове
Sent Відправлено
In the queue У черзі відправки
In the process У процесі відправки
Error sending Сталася помилка під час відправки
Don\'t index Не індексувати
Sent to reindexing Відправлено на переіндексацію
  • Якщо сталася помилка, буде повернуто JSON об'єкт із повідомленням про помилку. Приклади помилок:
{
    "success": false,
    "errors":{
        "link": [
            "The link field is required."
        ]
    }
}
{
    "success": false,
    "errors":[
        "Project not found"
    ]
}
{
    "success": false,
    "errors":[
        "URL not found"
    ]
}

Також можна отримати статус посилання за ID посилання

Для цього виконайте GET запит за адресою /api/v1/link/status/ID

GET https://2index.ninja/api/v1/link/status/ID

Відповідь на запит буде такою самою як і в попередньому варіанті

Відправити посилання на переіндексацію

Надсилає непроіндексовані посилання на переіндексацію. Приймає параметр max_attempts для обмеження максимальної к-сті переотправок посилань (від 1 до 10). Приймає масив посилань links для переотправки на індексацію, якщо посилання не передані то отримує всі непроіндексовані посилання з проєкту. Далі перевіряє к-сть відправок посилань і після перевірки намагається додати посилання у проєкт, враховуючи ліміти акаунта. Якщо передані посилання, які не надсилалися, вони теж будуть додані в чергу.

Виконайте POST запит за адресою /api/v1/link/resent_notindexed_links/{project_id}

POST https://2index.ninja/api/v1/link/resent_notindexed_links/{project_id}

Параметри запиту:

Поле Обов'язково Опис
project_id так ID проєкту
max_attempts так (від 1 до 10) Ліміт спроб відправки на індексацію
links ні, якщо не вказано — будуть використовуватися ВСІ непроіндексовані посилання вказаного проєкту Посилання, що переотправляються
  • При успішному запиті у відповідь буде отримано json об'єкт:
{
    "success": true,
    "message": "Links have been successfully added to the project. Invalid links was ignored.",
    "invalid_links": [],
    "project_id": 1,
    "ignored_links": [
        {
            "url": "https://domain.com/url1",
            "attempts": 2
        },
        {
            "url": "https://domain.com/url2",
            "attempts": 2
        }
    ]
}

Де:

Поле Опис
success Статус успішності запиту
message Повідомлення про успіх
invalid_links Список невалідних посилань, які не були додані
project_id ID проєкту
ignored_links Проігноровані посилання — ті, що вже відправлені max_attempts чи більше разів

У разі помилки буде повернуто json об'єкт із повідомленнями про помилки. Наприклад:

{
    "success": false,
    "errors": {
        "max_attempts": [
            "The max attempts field must not be greater than 10."
        ],
        "links": [
            "The links field must be an array."
        ]
    }
}

Або:

{
    "success": false,
    "errors": [
        "You do not have enough tokens to add any links. You need at least 1 tokens."
    ],
    "ignored_links": []
}

Видалити посилання з проєкту

Видаляє посилання або масив посилань із проєкту. Якщо посилання ще у черзі відправки — токени за нього повертаються на баланс. Уже відправлені посилання видаляються без повернення токенів.

Виконайте POST запит за адресою /api/v1/link/delete/{project_id}:

POST https://2index.ninja/api/v1/link/delete/{project_id}

Параметри запиту:

Поле Обов'язково Опис
project_id так ID проєкту (передається в URL).
link так Посилання для видалення. Можна передати один рядок або масив посилань.
  • При успішному запиті у відповідь буде отримано json об'єкт:
{
    "success": true,
    "deleted": 3,
    "message": "The URLs have been deleted."
}

Якщо в проєкті було кілька однакових URL (наприклад, посилання повторно додавалося), у відповіді буде додаткове поле duplicates:

{
    "success": true,
    "deleted": 5,
    "duplicates": 2,
    "message": "The URLs have been deleted, including duplicate (re-submitted) entries."
}

Якщо переданих посилань у проєкті не знайшлося:

{
    "success": true,
    "deleted": 0,
    "message": "No URLs were found to delete."
}

Можливі помилки:

{
    "success": false,
    "errors": ["You cannot work with links. The project is deeply archived"]
}
{
    "success": false,
    "errors": "Project not found"
}

Робота з джерелами посилань

Джерела посилань доступні для будь-яких типів проєктів і обробляються однаково. Для проєктів перевірки індексації доступний вибір лише google.

Додавання карти сайту

Виконайте POST запит за адресою /api/v1/sitemap/add

POST https://2index.ninja/api/v1/sitemap/add

Параметри запиту:

Поле Обов'язково Опис
project_id так ID проєкту
sitemap так Посилання на карту сайту
google ні, за умови yandex або bing Надсилати посилання в Google
yandex ні, за умови google або bing Надсилати посилання в Yandex
bing ні, за умови google або yandex Надсилати посилання в Bing
google_access_granted ні Надано доступ до акаунта Google
watch ні Слідкувати за змінами карти сайту

Можливі помилки:

Помилка
Помилка валідації даних. Одне з обов'язкових полів відсутнє або має неправильне значення.
Недоступність тарифу. Тарифний план користувача завершився.
Проєкт не знайдено. Користувач не володіє вказаним проєктом або проєкт не існує.
Внутрішня помилка сервера

Приклади відповідей:

Успішне додавання карти сайту:

{
    "success": true,
    "message": "Карта сайту успішно додана, ми завантажимо її якомога швидше і надішлемо повідомлення електронною поштою після завершення."
}

Помилка валідації:

{
    "errors": ["sitemap":["The sitemap field is required."]]
}

Проєкт не знайдено:

{
    "errors": ["Project not found"]
}

Оновлення статусу відстеження карти сайту

Виконайте POST запит за адресою /api/v1/sitemap/update_watch

POST https://2index.ninja/api/v1/sitemap/update_watch

Параметри запиту:

Поле Тип Обов'язково Опис
project_id integer так ID проєкту
sitemap_id integer так ID карти сайту
watch boolean так Ознака того, чи потрібно відстежувати зміни карти сайту

Можливі помилки:

Помилка
Помилка валідації даних. Одне з обов'язкових полів відсутнє або має неправильне значення.
Проєкт або джерело посилання не знайдено. Користувач не володіє вказаним проєктом або проєкт/джерело не існує.
Внутрішня помилка сервера

Приклади відповідей:

Успішне оновлення статусу відстеження:

{
    "success": true
}

Джерело посилання не знайдено:

{
    "errors": ["Link source not found"]
}

Видалення джерела посилань

Виконайте POST запит за адресою /api/v1/sitemap/delete

POST https://2index.ninja/api/v1/sitemap/delete

Параметри запиту:

Поле Тип Обов'язково Опис
project_id integer так ID проєкту
sitemap_id integer так ID карти сайту

Можливі помилки:

Помилка
Помилка валідації даних. Одне з обов'язкових полів відсутнє або має неправильне значення.
Проєкт або джерело посилання не знайдено. Користувач не володіє вказаним проєктом або проєкт/джерело не існує.
Внутрішня помилка сервера

Приклади відповідей:

Успішне видалення джерела посилань:

{
    "success": true,
    "message": "Джерело посилань успішно видалено"
}

Проєкт не знайдено:

{
    "errors": ["Project not found"]
}

Список джерел посилань

Для отримання списку доданих джерел посилань потрібно зробити POST запит на https://2index.ninja/api/v1/link_sources

У запиті передати project_id

У результаті буде повернуто такий набір даних:

[
    {
        "id": 1247,
        "project_id": 3540,
        "name": "urls.txt",
        "type": "text file",
        "created_at": "2025-01-17T15:51:43.000000Z",
        "processing_date": "2025-01-17T15:51:48.000000Z",
        "has_error": false,
        "error_message": "",
        "status": "success",
        "is_pending": false,
        "is_success": true,
        "total_links": 29585,
        "added_links": 29582,
        "invalid_links": 3,
        "watch": 0,
        "google_access_granted": 0,
        "is_external_links": 1,
        "search_engines": {
            "google": "1"
        }
    },
    {
        "id": 1246,
        "project_id": 3540,
        "name": "urls.txt",
        "type": "text file",
        "created_at": "2025-01-17T15:50:59.000000Z",
        "processing_date": "2025-01-17T15:51:02.000000Z",
        "has_error": false,
        "error_message": "",
        "status": "success",
        "is_pending": false,
        "is_success": true,
        "total_links": 29585,
        "added_links": 10440,
        "invalid_links": 1,
        "watch": 0,
        "google_access_granted": 0,
        "is_external_links": 1,
        "search_engines": {
            "google": "1"
        }
    },
    {
        "id": 1245,
        "project_id": 3540,
        "name": "urls.txt",
        "type": "text file",
        "created_at": "2025-01-17T15:46:17.000000Z",
        "processing_date": null,
        "has_error": false,
        "error_message": null,
        "status": "pending",
        "is_pending": true,
        "is_success": false,
        "total_links": 0,
        "added_links": 0,
        "invalid_links": 0,
        "watch": 0,
        "google_access_granted": 0,
        "is_external_links": 1,
        "search_engines": {
            "google": "1"
        }
    },
    {
        "id": 1244,
        "project_id": 3540,
        "name": "urls.txt",
        "type": "text file",
        "created_at": "2025-01-17T14:52:07.000000Z",
        "processing_date": "2025-01-17T14:53:06.000000Z",
        "has_error": true,
        "error_message": "Unable to encode attribute [invalid_links_list] for model [App\\Models\\LinkSource\\LinkSource] to JSON: Malformed UTF-8 characters, possibly incorrectly encoded.",
        "status": "error",
        "is_pending": false,
        "is_success": false,
        "total_links": 29585,
        "added_links": 0,
        "invalid_links": 3,
        "watch": 0,
        "google_access_granted": 0,
        "is_external_links": 1,
        "search_engines": {
            "google": "1"
        }
    }
]

Де

id — id джерела посилань project_id — id проєкту name — назва прикріпленого файлу або адреса карти сайту type — тип джерела файлів (текстовий файл або карта сайту) — може бути: sitemap, text file created_at — дата створення processing_date — дата обробки has_error — сталася помилка обробки error_message — повідомлення про помилку status — статус — може бути: pending (очікує обробки), error (помилка обробки), success is_pending — зараз обробляється is_success — успішна обробка total_links — усього знайдено посилань added_links — додано посилань invalid_links — невалідні посилання watch — статус спостереження за картою сайту google_access_granted — доступ до акаунта google надано чи ні is_external_links — зовнішні посилання search_engines — підключені пошукові системи

Приклад реалізації на PHP


<?php

/**
 * Клас для роботи з API сервісу 2Index.Ninja
 */
class API_2IndexNinja
{
    /**
     * URL API-ендпоінта
     * @var string
     */
    private $url = 'https://2index.ninja/api/v1/';

    /**
     * Токен доступу до API
     * @var string
     */
    private $access_token;

    /**
     * Конструктор класу.
     *
     * @param string $access_token Токен доступу для авторизації в API.
     */
    public function __construct($access_token)
    {
        $this->access_token = $access_token;
    }

    /*
    |--------------------------------------------------------------------------
    | Методи для роботи з акаунтом
    |--------------------------------------------------------------------------
    */

    /**
     * Отримує інформацію про поточний акаунт.
     *
     * @return array|null Декодована відповідь API з даними акаунта.
     */
    public function account()
    {
        return $this->make_request('account');
    }

    /**
     * Реєструє нового користувача.
     *
     * @param string $email Email нового користувача.
     * @param string $source Джерело реєстрації.
     * @return array|null Декодована відповідь API.
     */
    public function register_user($email, $source)
    {
        return $this->make_request('register', [
            'email'  => $email,
            'source' => $source,
        ]);
    }

    /*
    |--------------------------------------------------------------------------
    | Методи для роботи з проєктами
    |--------------------------------------------------------------------------
    */

    /**
     * Отримує список проєктів користувача.
     *
     * Без параметрів повертає всі не-архівні проєкти. Якщо передано $page,
     * увімкнено пагінацію і у відповіді з'являється блок 'pagination'.
     *
     * @param int|null $page     Номер сторінки (якщо вказано — увімкнено пагінацію).
     * @param int|null $per_page Розмір сторінки (1..100, за замовчуванням 20). Враховується лише з $page.
     * @return array|null Декодована відповідь API зі списком проєктів.
     */
    public function projects_list($page = null, $per_page = null)
    {
        $url_data = [];
        if ($page) {
            $url_data['page'] = $page;

            if ($per_page) {
                $url_data['per_page'] = $per_page;
            }
        }

        $url_data = $url_data ? ('?' . http_build_query($url_data)) : '';

        return $this->make_request('project' . $url_data);
    }

    /**
     * Отримує дані конкретного проєкту за його ID.
     *
     * @param int $id ID проєкту.
     * @return array|null Декодована відповідь API з даними проєкту.
     */
    public function project($id)
    {
        return $this->make_request('project/' . $id);
    }

    /**
     * Додає новий проєкт для індексації посилань.
     *
     * @param string $name Назва проєкту.
     * @param string $website Сайт проєкту.
     * @param bool $for_external_links Чи призначений для зовнішніх посилань (0 або 1).
     * @param int|null $indexing_speed Швидкість індексації.
     * @return array|null Декодована відповідь API з даними створеного проєкту.
     */
    public function add_project($name, $website, $for_external_links = 0, $indexing_speed = null)
    {
        return $this->make_request('project', [
            'name'               => $name,
            'website'            => $website,
            'for_external_links' => $for_external_links,
            'indexing_speed'     => $indexing_speed,
            'type'               => 'indexing',
        ]);
    }

    /**
     * Додає новий проєкт для перевірки індексації.
     *
     * @param string $name Назва проєкту.
     * @param int|null $checking_speed Швидкість перевірки.
     * @return array|null Декодована відповідь API з даними створеного проєкту.
     */
    public function add_indexing_check_project($name, $checking_speed = null)
    {
        return $this->make_request('project', [
            'name'           => $name,
            'checking_speed' => $checking_speed,
            'type'           => 'indexing_check',
        ]);
    }

    /**
     * Знаходить проєкт, прив'язаний до сайту на WordPress.
     * Якщо такого проєкту немає, створює новий.
     *
     * @param string $website URL сайту для пошуку проєкту.
     * @return array|null Декодована відповідь API з даними проєкту.
     */
    public function get_wordpress_project($website)
    {
        return $this->make_request('account/get_wordpress_project', ['website' => $website]);
    }


    /**
     * Очищає чергу посилань для проєкту.
     *
     * @param int $project_id ID проєкту.
     * @return array|null Декодована відповідь API.
     */
    public function clear_queue($project_id)
    {
        return $this->make_request('project/' . $project_id . '/clear_queue', true);
    }

    /**
     * Обнуляє швидкість індексації у всіх завершених проєктів користувача.
     * Усі параметри-фільтри необов'язкові; дати у форматі Y-m-d.
     *
     * @param string|null $created_at_from
     * @param string|null $created_at_to
     * @param string|null $completed_at_from
     * @param string|null $completed_at_to
     * @return array|null Декодована відповідь: success, message, affected_projects.
     */
    public function reset_speed_completed(
        $created_at_from = null,
        $created_at_to = null,
        $completed_at_from = null,
        $completed_at_to = null
    ) {
        $payload = array_filter([
            'created_at_from'   => $created_at_from,
            'created_at_to'     => $created_at_to,
            'completed_at_from' => $completed_at_from,
            'completed_at_to'   => $completed_at_to,
        ]);

        // Без параметрів: порожній масив трактується make_request() як "немає
        // POST-даних" і надсилається GET, який ловиться маршрутом project/{id}.
        // Тому за порожніх фільтрів примусово використовуємо POST через true.
        return $this->make_request('project/reset_speed_completed', $payload ?: true);
    }

    /**
     * Архівує всі завершені проєкти користувача.
     * Приймає ті самі необов'язкові фільтри за діапазонами дат, що й
     * reset_speed_completed.
     *
     * @param string|null $created_at_from
     * @param string|null $created_at_to
     * @param string|null $completed_at_from
     * @param string|null $completed_at_to
     * @return array|null Декодована відповідь: success, message, archived_count.
     */
    public function archive_completed(
        $created_at_from = null,
        $created_at_to = null,
        $completed_at_from = null,
        $completed_at_to = null
    ) {
        $payload = array_filter([
            'created_at_from'   => $created_at_from,
            'created_at_to'     => $created_at_to,
            'completed_at_from' => $completed_at_from,
            'completed_at_to'   => $completed_at_to,
        ]);

        return $this->make_request('project/archive_completed', $payload ?: true);
    }

    /*
    |--------------------------------------------------------------------------
    | Методи для роботи з посиланнями
    |--------------------------------------------------------------------------
    */

    /**
     * Додає посилання у вказаний проєкт.
     *
     * @param int $project_id ID проєкту.
     * @param array|string $links Масив посилань або одне посилання у вигляді рядка.
     * @param bool $google Чи надсилати в Google.
     * @param bool $yandex Чи надсилати в Yandex.
     * @param bool $bing Чи надсилати в Bing.
     * @param bool $google_access_granted Прапорець, що підтверджує доступ до Google.
     * @return array|null Декодована відповідь API.
     */
    public function add_links($project_id, $links, $google, $yandex, $bing, $google_access_granted = false)
    {
        return $this->make_request('link/add', [
            'project_id'            => $project_id,
            'links'                 => $links,
            'google'                => $google,
            'yandex'                => $yandex,
            'bing'                  => $bing,
            'google_access_granted' => $google_access_granted,
        ]);
    }

    /**
     * Додає посилання у проєкт за іменем. Якщо проєкт не існує, він буде створений.
     *
     * @param array|string $links Масив посилань або одне посилання у вигляді рядка.
     * @param bool $google Чи надсилати в Google.
     * @param bool $yandex Чи надсилати в Yandex.
     * @param bool $bing Чи надсилати в Bing.
     * @param string $project_name Ім'я проєкту (за замовчуванням 'default').
     * @param bool $google_access_granted Прапорець, що підтверджує доступ до Google.
     * @return array|null Декодована відповідь API.
     */
    public function add_links_simple($links, $google, $yandex, $bing, $project_name = 'default', $google_access_granted = false)
    {
        return $this->make_request('link/add_simple', [
            'project_name'          => $project_name,
            'links'                 => $links,
            'google'                => $google,
            'yandex'                => $yandex,
            'bing'                  => $bing,
            'google_access_granted' => $google_access_granted,
        ]);
    }

    /**
     * Отримує джерела посилань для проєкту.
     *
     * @param int $project_id ID проєкту.
     * @return array|null Декодована відповідь API.
     */
    public function link_sources($project_id)
    {
        return $this->make_request('link_sources', [
            'project_id' => $project_id
        ]);
    }

    /**
     * Отримує статус вказаного посилання.
     * Якщо одне й те саме посилання надсилалося кілька разів — поверне статус останнього надісланого.
     *
     * @param int $project_id ID проєкту
     * @param string $link Посилання, що перевіряється
     * @return array Статус посилання
     */
    public function checkLink($project_id, $link)
    {
        return $this->make_request('link/status', [
            'project_id' => $project_id,
            'link' => $link,
        ]);
    }

    /**
     * Отримує статус вказаного посилання.
     *
     * @param int $link_id ID посилання
     * @return array Статус посилання
     */
    public function checkLinkById($link_id)
    {
        return $this->make_request('link/status/' . $link_id);
    }

    /**
     * Переотправляє непроіндексовані посилання проєкту на індексацію.
     * Якщо $links не переданий — беруться всі непроіндексовані посилання проєкту,
     * у яких кількість спроб менша за $max_attempts.
     *
     * @param int $project_id ID проєкту.
     * @param int $max_attempts Максимальна кількість спроб відправки (1..10).
     * @param array|null $links Конкретний список посилань для переотправки.
     * @return array|null
     */
    public function resent_notindexed_links($project_id, $max_attempts, $links = null)
    {
        return $this->make_request('link/resent_notindexed_links/' . $project_id, [
            'max_attempts' => $max_attempts,
            'links'        => $links,
        ]);
    }

    /**
     * Видаляє посилання або масив посилань із проєкту.
     *
     * @param int $project_id ID проєкту.
     * @param string|array $link Посилання для видалення (або масив).
     * @return array|null
     */
    public function deleteUrls($project_id, $link)
    {
        return $this->make_request('link/delete/' . $project_id, [
            'link' => $link,
        ]);
    }

    /*
    |--------------------------------------------------------------------------
    | Методи для роботи з джерелами посилань
    |--------------------------------------------------------------------------
    */

    /**
     * Додає Sitemap у проєкт.
     *
     * @param int $project_id ID проєкту.
     * @param string $sitemap_url URL файлу Sitemap.
     * @param bool $google Чи надсилати в Google.
     * @param bool $yandex Чи надсилати в Yandex.
     * @param bool $bing Чи надсилати в Bing.
     * @param bool $google_access_granted Прапорець, що підтверджує доступ до Google.
     * @param bool $watch Чи увімкнути відстеження змін у Sitemap.
     * @return array|null Декодована відповідь API.
     */
    public function add_sitemap($project_id, $sitemap_url, $google, $yandex, $bing, $google_access_granted = false, $watch = false)
    {
        return $this->make_request('sitemap/add', [
            'project_id'            => $project_id,
            'sitemap'               => $sitemap_url,
            'google'                => $google,
            'yandex'                => $yandex,
            'bing'                  => $bing,
            'google_access_granted' => $google_access_granted,
            'watch'                 => $watch,
        ]);
    }

    /**
     * Вмикає або вимикає відстеження змін для Sitemap.
     *
     * @param int $project_id ID проєкту.
     * @param int $sitemap_id ID файлу Sitemap.
     * @param bool $watch Новий статус відстеження (true — увімкнути, false — вимкнути).
     * @return array|null Декодована відповідь API.
     */
    public function update_sitemap_watch($project_id, $sitemap_id, $watch)
    {
        return $this->make_request('sitemap/update_watch', [
            'project_id' => $project_id,
            'sitemap_id' => $sitemap_id,
            'watch'      => $watch,
        ]);
    }

    /**
     * Видаляє Sitemap із проєкту.
     *
     * @param int $project_id ID проєкту.
     * @param int $sitemap_id ID файлу Sitemap для видалення.
     * @return array|null Декодована відповідь API.
     */
    public function sitemap_delete($project_id, $sitemap_id)
    {
        return $this->make_request('sitemap/delete', [
            'project_id' => $project_id,
            'sitemap_id' => $sitemap_id,
        ]);
    }

    /**
     * Виконує запит до API.
     *
     * @param string $endpoint Ендпоінт API для виклику.
     * @param array|true $post_data Дані для POST-запиту. Якщо true — надсилається порожній POST.
     * @return array|null Декодована JSON-відповідь API або null у разі помилки.
     */
    private function make_request($endpoint, $post_data = [])
    {
        $ch = curl_init($this->url . $endpoint);

        if ($post_data === true) {
            curl_setopt($ch, CURLOPT_POST, 1);
        } elseif ($post_data) {
            curl_setopt($ch, CURLOPT_POST, 1);
            curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query($post_data));
        }

        curl_setopt($ch, CURLOPT_HTTPHEADER, ["Authorization: Bearer " . $this->access_token]);
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
        curl_setopt($ch, CURLOPT_HEADER, false);

        // Вказує user-agent — необхідно, якщо з'являються помилки 403.
        // curl_setopt($ch, CURLOPT_USERAGENT, 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/123.0.0.0 Safari/537.36');

        $result = curl_exec($ch);
        curl_close($ch);

        return json_decode($result, 1);
    }
}