Перейти к содержанию

Интеграция RocketProfit с Keitaro: API и постбэк

Как отправлять лиды в RocketProfit по API conversion/new со своего лендинга и настроить постбэк в Keitaro: поля запроса, коды ответов, статусы, ошибки…

Интеграция RocketProfit с Keitaro: API и постбэк

RocketProfit принимает заявки по API одним POST-запросом на https://tracker.rocketprofit.com/conversion/new. Обязательные поля: ID потока, IP покупателя, имя, телефон и код страны, а subid клика Keitaro передаётся в метке sid1. Обратно статусы приходят глобальным постбэком со значениями pending, approved, rejected и trash.

Сеть жива: на главной она называет себя международной товарной сетью, которая работает с 2014 года, с COD-офферами на Европу, Африку и ЛатАм. Ниже настройка по документации из кабинета RocketProfit и Keitaro на октябрь 2026 года.

Что даёт интеграция по API

  • Свой лендинг или прелендинг вместо промо сети, при этом лид уходит в RocketProfit сразу с сервера.
  • Каждый апрув, отмена и треш привязаны к клику в Keitaro. Видно, какие креативы и площадки дают выкупаемые заявки.
  • Можно отсекать мусор до отправки в сеть: пустые имена, короткие номера, повторные заявки.

Где взять campaign_id

Ключа API у RocketProfit нет: заявку к вашему аккаунту привязывает ID потока. Создайте поток на странице оффера и возьмите его номер, в документации это поле campaign_id (пример из кабинета: 500401).

личный кабинет rocketprofit

Поля запроса по странице «Приём заказов через RocketProfit» в кабинете:

ПолеОбязательноеЧто передавать
campaign_idдаID потока
ipдаIP покупателя. Если не передать, сеть возьмёт IP сервера, который делает запрос
country_codeдадвухбуквенный код страны, например CZ
name, phoneдаимя и телефон покупателя
sid1…sid5нетсвои метки, одна из них под subid Keitaro
extra_phone, address, mail, street, house, room, zip, city, commentнетдоп. телефон, адрес, почта, комментарий
redirect_urlнеткуда отправить покупателя после приёма заказа
Таблица прокручивается вбок

Форма на лендинге

Если лендинг загружен в Keitaro архивом, трекер сам заменит {subid} на ID клика, так устроен локальный лендинг. Страну задайте скрытым полем.

<form action="api.php" method="post">
  <input type="text" name="name" placeholder="Jméno" required>
  <input type="tel" name="phone" placeholder="+420 777 123 456" required>
  <input type="hidden" name="country_code" value="CZ">
  <input type="hidden" name="subid" value="{subid}">
  <button type="submit">Objednat</button>
</form>

Для лендинга на своём хостинге добавьте к его адресу в Keitaro ?subid={subid} и выводите значение в форму через htmlspecialchars($_GET['subid'] ?? '', ENT_QUOTES) в файле index.php.

Обработчик api.php для RocketProfit

<?php
// api.php: принимает заявку с лендинга и отправляет её в RocketProfit
const API_URL     = 'https://tracker.rocketprofit.com/conversion/new';
const CAMPAIGN_ID = 0;        // ОБЯЗАТЕЛЬНО замените на ID своего потока из кабинета RocketProfit
const BEHIND_CF   = false;    // true, если домен лендинга за Cloudflare
const TIMEOUT     = 3;        // секунды: лимит Keitaro для локальных лендингов
const LOG_FILE    = __DIR__ . '/rp-leads.log';

if (($_SERVER['REQUEST_METHOD'] ?? '') !== 'POST') {
    http_response_code(405);
    exit;
}

$name    = trim((string)($_POST['name'] ?? ''));
$phone   = preg_replace('/\D+/', '', (string)($_POST['phone'] ?? ''));
$country = strtoupper(preg_replace('/[^A-Za-z]/', '', (string)($_POST['country_code'] ?? '')));
$subid   = preg_replace('/[^A-Za-z0-9_-]/', '', (string)($_POST['subid'] ?? ''));

if ($name === '' || strlen($phone) < 7 || strlen($country) !== 2) {
    header('Location: error.php');
    exit;
}

$ip = $_SERVER['REMOTE_ADDR'] ?? '';
if (BEHIND_CF && !empty($_SERVER['HTTP_CF_CONNECTING_IP'])) {
    $ip = $_SERVER['HTTP_CF_CONNECTING_IP'];
}

$order = [
    'campaign_id'  => CAMPAIGN_ID,
    'ip'           => $ip,
    'country_code' => $country,
    'name'         => $name,
    'phone'        => $phone,
    'sid1'         => $subid,   // subid клика Keitaro
    'sid2'         => (string)($_POST['sid2'] ?? ''),
];

$ch = curl_init(API_URL);
curl_setopt_array($ch, [
    CURLOPT_POST           => true,
    CURLOPT_POSTFIELDS     => http_build_query($order),
    CURLOPT_HTTPHEADER     => ['Content-Type: application/x-www-form-urlencoded'],
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_CONNECTTIMEOUT => TIMEOUT,
    CURLOPT_TIMEOUT        => TIMEOUT,
]);
$body = curl_exec($ch);
$code = (int)curl_getinfo($ch, CURLINFO_HTTP_CODE);

// 200: лид принят (в ответе есть id), 302: принят с redirect_url,
// 400: ошибки валидации, 401: нет campaign_id, 403: запрещённое ГЕО
$ok = in_array($code, [200, 302], true);

file_put_contents(LOG_FILE, date('c') . " http=$code subid=$subid "
    . substr((string)$body, 0, 300) . "\n", FILE_APPEND | LOCK_EX);

header('Location: ' . ($ok ? 'success.php' : 'error.php'));
exit;

До теста замените CAMPAIGN_ID на номер своего потока. Храните журнал вне публичной папки и маскируйте персональные данные в ответе API. Включение BEHIND_CF безопасно только при проверке, что запрос пришёл через доверенный прокси, а не просто содержит похожий заголовок.

Что важно в коде:

  • Заголовок Content-Type: application/x-www-form-urlencoded обязателен по документации сети, тело собирается через http_build_query.
  • Успех определяется по коду ответа. 200 означает, что лид принят (в ответе приходит его id), 302 бывает, если вы передали redirect_url. Любой другой код ведёт на error.php, а тело ответа пишется в лог.
  • IP берётся из REMOTE_ADDR. В официальном примере RocketProfit IP читается из X-Forwarded-For и похожих заголовков, но без прокси перед сайтом их легко подделать. Включайте BEHIND_CF только если домен действительно за Cloudflare.
  • Таймаут 3 секунды: это лимит Keitaro для PHP-лендингов, загруженных в трекер. На своём хостинге можно поставить 10.

Страница success.php должна показывать понятное «Спасибо»: можно взять готовую мультиязычную страницу благодарности. Чтобы на обзвон не уходили номера с опечатками, добавьте на форму маску поля телефона.

Постбэк RocketProfit в Keitaro

Шаг 1. Партнёрская сеть в Keitaro

  1. «Партнерские сети» → «Создать», шаблон Rocketprofit.com.
  2. В «Параметрах для оффера» шаблон ставит sid1={subid}. Это нужно для офферов, подключённых редиректом, при API-отправке subid кладёт в sid1 сам api.php.
  3. Проверьте Postback URL. В нашем трекере шаблон собирал ссылку с параметром sub_id={sid1}, а в документации Keitaro обязательный параметр называется subid. Используйте вариант из документации.
Настройка постбеков в Keitaro для интеграции с ПП Rocketprofit
https://ВАШ_ТРЕКЕР/POSTBACK_KEY/postback?subid={sid1}&status={status}&payout={payout}&currency={currency}&tid={id}&lead_status=pending&sale_status=approved&rejected_status=rejected&trash_status=trash&from=rocketprofit

Адрес трекера и ключ возьмите в «Настройки» → «Postback URL». tid={id} передаёт ID конверсии RocketProfit, поэтому два заказа с одного клика не перезапишут друг друга.

Шаг 2. Глобальный постбэк в RocketProfit

  1. Откройте «Потоки» → «Глобальный постбэк», вкладка «Настройки».
  2. Вставьте ссылку в поле «Постбэк URL». Запрос уйдёт методом GET, другого метода сеть не предлагает.
  3. Отметьте «Постбэк при смене статуса»: так трекер получит каждый переход pending, approved, rejected и trash.
  4. Если треш в Keitaro не нужен, добавьте «Не слать постбэк по лидам со статусом trash». Опция работает в связке с первой.
  5. Сохраните. Локальный постбэк в потоке главнее глобального, в глобальном можно указать две ссылки.
Настройка постбеков в Keitaro для интеграции с парнеркой Rocketprofit

На вкладке «Переотправка постбека» можно повторно отправить конверсии за выбранный поток и даты, если трекер был недоступен.

Макросы RocketProfit для ссылки: {id} (ID конверсии), {date} (время в UTC+0), {campaign_id}, {offer_id}, {country_code}, {ip}, {traffic_type}, {sid1}…{sid5}, {status}, {payout}, {currency}, {type} (cpa или cancellations), {campaign_country_code} и {reason} (причина отмены).

Статусы RocketProfit и Keitaro

Статус RocketProfitЧто значитТип в KeitaroОбучение
pendingожидает обработкиLeadlead_status=pending
approvedподтверждёнSalesale_status=approved
rejectedотклонёнRejectedrejected_status=rejected
trashневалидныйTrashtrash_status=trash
Таблица прокручивается вбок

Если удобнее считать треш вместе с отменами, поставьте rejected_status=rejected,trash и уберите trash_status. Апрув и CR по этим данным удобно считать в калькуляторе арбитражника.

Ошибки и где их искать

Код или сообщениеПричинаЧто сделать
400данные заказа не прошли проверку, список ошибок в теле ответаоткройте rp-leads.log: в ответе сети перечислены поля с ошибками
401нет campaign_id или он не распознанпроверьте константу CAMPAIGN_ID, нужен числовой ID потока
403ГЕО покупателя запрещено в оффересверьте страну трафика с ограничениями оффера
404, «No campaign found for passed params»потока с таким ID нетпроверьте номер потока в кабинете
423в официальном примере это непройденная проверка незавершённого заказа, покупателя возвращают на лендингуточните причину у менеджера сети
Keitaro: Click for subid REPLACE not foundв постбэке не та меткаsubid={sid1} в ссылке и sid1 в api.php должны совпадать
Keitaro: Conversion type not foundстатус без обученияпроверьте lead_status, sale_status, rejected_status, trash_status
Таблица прокручивается вбок

Ошибки трекера смотрите в «Обслуживание» → «Логи» → «Postbacks», расшифровка есть в разделе Keitaro про устранение проблем с postback. Отправленные сетью запросы видны на вкладке «Глобальный постбэк лог».

Частые вопросы

Нужен ли API-ключ RocketProfit?

Нет. Заявка привязывается к вашему аккаунту через campaign_id, то есть ID потока. Поэтому номер потока не стоит светить в коде страницы, держите его в PHP.

Можно ли передавать subid в sid5?

Можно, главное одинаково в обработчике и постбэке. В кабинете сказано, что при выгрузке промо из потока метка sid5 занимается автоматически для Keitaro, поэтому со своим лендингом мы используем sid1, как в шаблоне трекера.

Каким методом RocketProfit отправляет постбэк?

Только GET. Макросы в фигурных скобках заменяются значениями в момент отправки.

Что делать, если трекер лежал и постбэки потерялись?

Откройте «Глобальный постбэк» → «Переотправка постбека», выберите поток, конверсии и даты и отправьте их заново.

Почему тестовая заявка не дошла до Keitaro?

Проверьте, что в заявке был реальный subid клика: партнёрские сети в тестовых постбэках его не передают, это отдельно оговорено в документации Keitaro.

Редакция BoostClicks

Материалы о настройке рекламы, трекинге и автоматизации: инструкции, примеры кода и расчёты с указанием условий проверки.