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

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

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

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

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

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

У деяких випадках, якщо повертатиметься помилка 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"

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

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

Отримати дані облікового запису

Потрібно виконати 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,
        "tariff_available": true,
        "tariff_expiring_date": "2025-01-16T14:26:11.000000Z",
        "email_verified": false,
        "link_cost": "$0.00056"
    }
}

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

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

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

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

У відповідь будуть отримані дані у форматі 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",
        }
        ...
    ]
}

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

Потрібно виконати 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 ні** Швидкість індексації проекту, якщо не вказано, буде застосована вся доступна швидкість checking_speed indexing_check indexing
checking_speed integer ні** Швидкість перевірки indexing_speed проекту, якщо не вказано вся доступна швидкість на indexing Використовується для проектів з типом indexing_check .
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

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

Потрібно виконати запит 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"]
}

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

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

Потрібно виконати запит 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_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_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

Відповідь буде такою ж, як і у попередньому варіанті

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

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

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

Виконайте запит 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": 22,
        "project_id": 3540,
        "name": "https://2index.ninja/sitemap.xml",
        "type": "sitemap",
        "created_at": "2025-07-03T14:24:23.000000Z",
        "processing_date":,
        "has_error":,
        "error_message":,
        "status": "pending",
        "is_pending": 1,
        "is_success":,
        "total_links": 0,
        "added_links": 0,
        "invalid_links": 0,
        "watch": 1,
        "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 - доступ до облікового запису гугл надано чи ні
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');
    }

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

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

    /**
     * Отримує дані конкретного проекту за його 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',
        ]);
    }

    /**
     * Очищає чергу посилань для проекту.
     *
     * @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);
    }

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

    /**
     * Додає посилання у вказаний проект.
     *
     * @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);
    }

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

    /**
     * Видалити посилання з проєкту
     *
     * @param string|array $link
     * @return void
     */
    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);
    }
}