На этой странице
Эти функции отдают то же, что вы видите в разделе Офферы кабинета: список офферов, ставки по странам и целям, лендинги и прелендинги. С их помощью можно выгрузить каталог офферов в свой инструмент (таблицу, бота, панель, трекер) и получить готовые сайты оффера, чтобы разместить их на своём хостинге. Всё это делает приложение offer, у него пять функций.
Правила запроса, токен и формат ответа — на странице Общие правила API. Там же общие ошибки входа в API: key (токен не подходит) и ban (учётная запись заблокирована). Они возможны у любой функции ниже и в их таблицах ошибок не повторяются. Фазы заказа, на которые ссылаются показатели, — в справочниках значений.
Выгрузить каталог в свой инструмент#
-
Вызовите
offer/list. Одним запросом придёт весь видимый вам каталог в кратком виде: ID, название, категория, модель оплаты, гео и показатели. -
Для нужных офферов вызовите
offer/showс параметромoffer: он отдаёт ставки, сайты, товары и источники трафика. Запрашивайте офферы по одному. -
Если нужны только названия для подписей в отчётах, берите
offer/names: ответ намного короче. -
Сохраняйте ответы у себя и обновляйте по расписанию, а не перед каждой операцией. Каталог — тяжёлый ответ, а показатели оффера сеть и сама пересчитывает не сразу.
Получить готовые сайты#
-
Вызовите
offer/sitesс ID оффера и выберите лендинг или прелендинг сarchive: true. Егоid— это параметрsite. -
Возьмите ID своего потока по этому офферу: список потоков отдаёт
wm/flows, новый поток создаётwm/add. -
Вызовите
offer/downloadс параметрамиsiteиflow: в ответ придёт ZIP-архив с готовым сайтом. Поток должен быть по тому же офферу, что и сайт. В лендинге из такого архива лежитapi.phpс вашим токеном. Токен открывает весь ваш API, поэтому архив личный: не публикуйте его и не загружайте туда, где его увидят другие (подробнее). -
Распакуйте архив в пустую папку на своём хостинге с PHP и подключите к нему домен: как установить. В страницах лежит ваш токен, поэтому загружайте их только в свой трекер, к которому больше ни у кого нет доступа.
Что попадает в каталог#
В каталог попадают только офферы самой сети: включённые, с незаблокированным трафиком. Дальше выдачу сужает приватность оффера:
- Публичный оффер виден и доступен всем, кроме тех, кого администратор внёс в его чёрный список: отдельного вебмастера или целую команду.
- Оффер по заявке виден в каталоге, но работать с ним можно только с разрешением. Он приходит с
private: trueиavailable: false, пока доступ не открыт. - Приватный оффер виден и доступен только тем, кто есть в его белом списке. Остальные не видят его совсем.
Независимо от приватности администратор может ограничить команду набором офферов или категорий: тогда вебмастерам этой команды видны только они.
Эти состояния различают два поля ответа. private показывает, что оффер не публичный, а available — что вам разрешено лить на него трафик и отправлять лиды. Оффер с available: false виден в каталоге, его ставки можно посмотреть, но работать с ним до получения доступа нельзя.
Показатели epc, cr и appr сеть пересчитывает по расписанию за скользящий период. Его длину задаёт администратор: от 7 до 90 дней, по умолчанию 15.
cr— конверсия: число заказов оффера без треша, поделённое на число кликов по его лендингам, в процентах.epc— средний доход с клика: выплаты вебмастерам по заказам в фазах «Холд» и «Принят» в основной валюте сети, поделённые на то же число кликов.appr— процент подтверждения: доля заказов в фазах «Холд» и «Принят» от всех заказов оффера без треша.
offer/listКраткий список офферов#
https://lk.dalead.pro/api/offer/list.json?id={token}Краткий список всех офферов, которые видны вам в каталоге: название, категория, модель оплаты, гео и три показателя. Ставок, сайтов и товаров здесь нет: это витрина, по которой выбирают оффер. Подробности по выбранному офферу берите в offer/show.
Список приходит целиком: у функции нет параметров, отфильтровать его или разбить на страницы нельзя. Сохраните ответ у себя и обновляйте по расписанию.
Запрос
https://lk.dalead.pro/api/offer/list.json?id={token}
curl 'https://lk.dalead.pro/api/offer/list.json?id={token}'
// У функции нет параметров
$url = 'https://lk.dalead.pro/api/offer/list.json?id={token}';
$data = [];
$ch = curl_init( $url );
curl_setopt_array( $ch, [
CURLOPT_POST => true,
CURLOPT_POSTFIELDS => http_build_query( $data ),
CURLOPT_RETURNTRANSFER => true,
CURLOPT_TIMEOUT => 30,
]);
$r = json_decode( curl_exec( $ch ), true );
curl_close( $ch );
if ( isset( $r['error'] ) ) error_log( 'API error: ' . $r['error'] );
Ответ
{
"status": "ok",
"data": {
"67": {
"id": 67,
"private": false,
"available": true,
"cid": 13,
"cat": "Gifts and fun",
"name": "Catnip Cola sparkling drink",
"short": "Catnip Cola",
"model": "cpl",
"country": [
"gb",
"au"
],
"epc": 0,
"cr": 0,
"appr": 0
},
"76": {
"id": 76,
"private": true,
"available": false,
"cid": 6,
"cat": "Electronics and gadgets",
"name": "Maine Coon Gadgets smart feeder",
"short": "Maine Coon Gadgets",
"model": "cps",
"country": [
"mx",
"au"
],
"epc": 0,
"cr": 0,
"appr": 0
}
}
}
| Поле | Описание |
|---|---|
status |
Результат операции: ok при успехе, error при ошибке. |
error |
Код ошибки для статуса error (см. ниже). |
data |
Офферы: объект, ключ — ID оффера. Если видимых вам офферов нет, приходит пустой массив []. |
Поля ответа.
Основные поля оффера:
| Поле | Описание |
|---|---|
id |
ID оффера. |
cid |
ID категории оффера. |
cat |
Название категории. |
name |
Полное название оффера, а если оно не задано, краткое. |
short |
Краткое название оффера. |
model |
Модель оплаты оффера символьным кодом: cps, cpl, cpv, cpa, cod, cor либо cpx, если модель не задана. |
country |
Гео оффера: массив двухбуквенных кодов стран. Единственный элемент ww означает весь мир. |
epc |
Средний доход с клика в основной валюте сети. |
cr |
Конверсия в процентах. |
appr |
Процент подтверждения. |
private |
true, если оффер не публичный: приватный или доступный по заявке. |
available |
true, если вам разрешено работать с оффером. false — оффер виден в каталоге, но доступ к нему нужно получить. |
Объект оффера.
offer/namesНазвания офферов#
https://lk.dalead.pro/api/offer/names.json?id={token}Лёгкий справочник «ID — краткое название». Он пригодится, когда полный каталог не нужен: подписать оффер в отчёте, проверить ID перед отправкой лида. Ответ намного короче, чем у offer/list, поэтому запрашивать его можно чаще.
В отличие от остальных функций раздела, справочник перечисляет только офферы, с которыми вам разрешено работать: офферы по заявке, к которым у вас пока нет доступа, в него не попадают. Названия идут по алфавиту. У функции нет параметров.
Запрос
https://lk.dalead.pro/api/offer/names.json?id={token}
curl 'https://lk.dalead.pro/api/offer/names.json?id={token}'
// У функции нет параметров
$url = 'https://lk.dalead.pro/api/offer/names.json?id={token}';
$data = [];
$ch = curl_init( $url );
curl_setopt_array( $ch, [
CURLOPT_POST => true,
CURLOPT_POSTFIELDS => http_build_query( $data ),
CURLOPT_RETURNTRANSFER => true,
CURLOPT_TIMEOUT => 30,
]);
$r = json_decode( curl_exec( $ch ), true );
curl_close( $ch );
if ( isset( $r['error'] ) ) error_log( 'API error: ' . $r['error'] );
Ответ
{
"status": "ok",
"data": {
"67": "Catnip Cola",
"65": "Claw Quest",
"70": "Kitty Cam Pro"
}
}
| Поле | Описание |
|---|---|
status |
Результат операции: ok при успехе, error при ошибке. |
error |
Код ошибки для статуса error (см. ниже). |
data |
Названия офферов: объект, ключ — ID оффера, значение — краткое название. Если доступных офферов нет, приходит пустой массив []. |
Поля ответа.
offer/showПолные данные офферов#
https://lk.dalead.pro/api/offer/show.json?id={token}Оффер целиком: ставки по странам или целям, лендинги и прелендинги, а у части офферов ещё и варианты товара, холд и источники трафика. Через эту функцию внешняя система строит свой каталог и узнаёт, сколько платят за заказ и куда вести трафик.
Запрос без offer вернёт все видимые вам офферы, в том числе с available: false, и для каждого — полную таблицу ставок, сайты и товары. Такой ответ очень тяжёлый, поэтому запрашивайте офферы по одному, а полную выгрузку делайте редко и по расписанию. Офферы идут по алфавиту краткого названия.
Ставки в ответе уже рассчитаны для вас. При сборке ответа применяются особые правила: для отдельных вебмастеров, команд, VIP-вебмастеров, агентств и вебмастеров, приглашённых VIP-вебмастером, а также правила с ограниченным сроком действия. Поэтому один оффер может отдавать разным вебмастерам разные ставки.
Параметры
| Параметр | Тип | Обяз. | Описание |
|---|---|---|---|
offer | int | — | ID оффера. Если не передан или равен нулю, возвращаются все видимые вам офферы, в том числе с available: false. |
Запрос
https://lk.dalead.pro/api/offer/show.json?id={token}&offer=68
curl 'https://lk.dalead.pro/api/offer/show.json?id={token}' \
--data-urlencode 'offer=68'
// Один оффер
$url = 'https://lk.dalead.pro/api/offer/show.json?id={token}';
$data = [
'offer' => 68,
];
$ch = curl_init( $url );
curl_setopt_array( $ch, [
CURLOPT_POST => true,
CURLOPT_POSTFIELDS => http_build_query( $data ),
CURLOPT_RETURNTRANSFER => true,
CURLOPT_TIMEOUT => 30,
]);
$r = json_decode( curl_exec( $ch ), true );
curl_close( $ch );
if ( isset( $r['error'] ) ) error_log( 'API error: ' . $r['error'] );
Ответ
{
"status": "ok",
"data": {
"68": {
"id": 68,
"private": false,
"available": true,
"cid": 7,
"cat": "Home appliances",
"name": "Meow Air Purifier for pet homes",
"short": "Meow Air Purifier",
"model": "cps",
"epc": 0,
"cr": 0,
"appr": 0,
"country": [
"fr",
"de",
"pl"
],
"hold": 7,
"land": {
"418": {
"id": 418,
"url": "https://meow.pro/meow-air-purifier-classic-landing/",
"name": "Classic landing",
"epc": 0,
"cr": 0,
"approve": 0,
"mobile": 0,
"default": false,
"local": true,
"archive": true
},
"419": {
"id": 419,
"url": "https://meow.pro/meow-air-purifier-comparison-landing/",
"name": "Comparison landing",
"epc": 0,
"cr": 0,
"approve": 0,
"mobile": 0,
"default": false,
"local": true,
"archive": false
}
},
"space": {
"421": {
"id": 421,
"url": "https://meow.pro/meow-air-purifier-vet-review/",
"name": "Vet review",
"epc": 0,
"cr": 0,
"approve": 0,
"mobile": 0,
"default": false,
"local": true,
"archive": false
}
},
"geo": {
"fr": {
"code": "fr",
"name": "France",
"price": 89,
"currency": "eur",
"cr": 0,
"epc": 0,
"approve": 0,
"desktop": {
"base": 17,
"upsale": 0,
"xsale": 0,
"percent": 0,
"currency": "usd"
},
"mobile": {
"base": 23,
"upsale": 0,
"xsale": 0,
"percent": 0,
"currency": "usd"
}
},
"pl": {
"code": "pl",
"name": "Poland",
"price": 379,
"currency": "pln",
"cr": 0,
"epc": 0,
"approve": 0,
"desktop": {
"base": 19,
"upsale": 0,
"xsale": 0,
"percent": 0,
"currency": "usd"
},
"mobile": {
"base": 25,
"upsale": 0,
"xsale": 0,
"percent": 0,
"currency": "usd"
}
}
},
"goods": {
"103": {
"id": 103,
"name": "Purifier Max",
"tid": 0,
"type": "Main",
"price": {
"fr": 129,
"pl": 549
}
},
"104": {
"id": 104,
"name": "Spare Filter Set",
"tid": 1,
"type": "Additional",
"price": {
"fr": 27,
"pl": 114
}
}
},
"allow": {
"1": "Desktop traffic",
"6": "Context ads"
},
"deny": {
"7": "Teaser ads"
}
}
}
}
{
"status": "ok",
"data": {
"72": {
"id": 72,
"private": true,
"available": true,
"cid": 2,
"cat": "Games",
"name": "Black Panther Slots online casino",
"short": "Black Panther Slots",
"model": "cps",
"epc": 0,
"cr": 0,
"appr": 0,
"country": [
"gb",
"de",
"br"
],
"hold": 7,
"land": {
"432": {
"id": 432,
"url": "https://meow.pro/black-panther-slots-classic-landing/",
"name": "Classic landing",
"epc": 0,
"cr": 0,
"approve": 0,
"mobile": 0,
"default": false,
"local": true,
"archive": false
}
},
"space": [],
"goal": {
"reg": {
"code": "reg",
"name": "Registration",
"price": false,
"currency": false,
"geo": {
"gb": {
"code": "reg-gb",
"name": "United Kingdom",
"price": false,
"currency": "gbp",
"cr": 0,
"epc": 0,
"approve": 0,
"desktop": {
"base": 6,
"upsale": 0,
"xsale": 0,
"percent": 0,
"currency": "usd"
},
"mobile": {
"base": 6,
"upsale": 0,
"xsale": 0,
"percent": 0,
"currency": "usd"
}
}
}
},
"dep": {
"code": "dep",
"name": "Deposit",
"price": false,
"currency": false,
"geo": {
"gb": {
"code": "dep-gb",
"name": "United Kingdom",
"price": false,
"currency": "gbp",
"cr": 0,
"epc": 0,
"approve": 0,
"desktop": {
"base": 45,
"upsale": 0,
"xsale": 0,
"percent": 0,
"currency": "usd"
},
"mobile": {
"base": 45,
"upsale": 0,
"xsale": 0,
"percent": 0,
"currency": "usd"
}
}
}
}
},
"allow": {
"3": "Websites",
"2": "Mobile traffic"
},
"deny": {
"9": "Social targeting",
"7": "Teaser ads"
}
}
}
}
{
"status": "ok",
"data": {
"76": {
"id": 76,
"private": true,
"available": false,
"cid": 6,
"cat": "Electronics and gadgets",
"name": "Maine Coon Gadgets smart feeder",
"short": "Maine Coon Gadgets",
"model": "cps",
"epc": 0,
"cr": 0,
"appr": 0,
"country": [
"mx",
"au"
],
"hold": 14,
"geo": {
"mx": {
"code": "mx",
"name": "Mexico",
"price": 1490,
"currency": "mxn",
"cr": 0,
"epc": 0,
"approve": 0,
"desktop": {
"base": 10,
"upsale": 0,
"xsale": 0,
"percent": 0,
"currency": "usd"
},
"mobile": {
"base": 10,
"upsale": 0,
"xsale": 0,
"percent": 0,
"currency": "usd"
}
},
"au": {
"code": "au",
"name": "Australia",
"price": 129,
"currency": "aud",
"cr": 0,
"epc": 0,
"approve": 0,
"desktop": {
"base": 18,
"upsale": 0,
"xsale": 0,
"percent": 0,
"currency": "usd"
},
"mobile": {
"base": 18,
"upsale": 0,
"xsale": 0,
"percent": 0,
"currency": "usd"
}
}
},
"allow": {
"1": "Desktop traffic",
"2": "Mobile traffic"
},
"deny": {
"12": "E-mail marketing"
}
}
}
}
| Поле | Описание |
|---|---|
status |
Результат операции: ok при успехе, error при ошибке. |
error |
Код ошибки для статуса error (см. ниже). |
data |
Офферы: объект, ключ — ID оффера. Если под запрос не подошёл ни один оффер, приходит пустой массив []: в том числе когда оффер с таким ID существует, но вам не виден. |
Поля ответа.
Все поля оффера лежат в одном объекте. Ниже они разбиты на группы, чтобы было удобнее читать. Поля, которых нет у части офферов и сетей, описаны в разделе Дополнительные поля.
Оффер:
| Поле | Описание |
|---|---|
id, cid, cat, name, short, model, country, epc, cr, appr |
Те же поля, что в offer/list. |
Основные поля оффера.
Ставки по странам. Каждая ставка — отдельная строка, ключ которой — двухбуквенный код страны или ww (весь мир):
| Поле | Описание |
|---|---|
geo |
Ставки по странам: объект, ключ — код страны, значение — строка ставки. У офферов с целями вместо него приходит goal, см. Дополнительные поля. |
Ставки.
Строка ставки:
| Поле | Описание |
|---|---|
code |
Код строки: у обычных офферов код страны, у офферов с целями код цели, а если цели разбиты ещё и по странам, то цель-страна, например dep-gb. |
name |
Название страны или цели. |
price |
Цена товара для покупателя или цена конверсии по цели в валюте currency. Число или строка вида "111.00". false, если цена не задана. |
currency |
Трёхбуквенный код валюты цены или false, если валюта не определена. |
cr |
Конверсия по этой стране или цели, в процентах. |
epc |
Средний доход с клика по этой стране или цели. |
approve |
Процент подтверждения по этой стране или цели. |
desktop |
Ставки для трафика с настольных устройств (объект, см. ниже). |
mobile |
Ставки для трафика с мобильных устройств (объект, тот же состав). |
Строка ставки.
Объекты desktop и mobile:
| Поле | Описание |
|---|---|
base |
Базовая ставка за заказ в валюте currency. |
upsale |
Надбавка за каждую единицу основного товара начиная со второй. |
xsale |
Надбавка за каждую единицу дополнительного товара. |
percent |
Ставка процентом от суммы заказа, от -100 до 100. |
currency |
Трёхбуквенный код валюты ставки. Если своя валюта у ставки не задана, приходит основная валюта сети. |
Ставки desktop и mobile.
Если оффер не различает мобильный и настольный трафик, оба объекта совпадают.
Сайты. Оба поля есть у любого оффера, у оффера без сайтов они пустые:
| Поле | Описание |
|---|---|
land |
Лендинги оффера: объект, ключ — ID сайта. |
space |
Прелендинги оффера: объект, ключ — ID сайта. |
Сайты оффера.
Состав объекта сайта такой же, как в ответе offer/sites.
Дополнительные поля
Эти поля есть не у каждого оффера и не в каждой сети: цели, холд, товары и ограничения источников трафика включает администратор сети. Поля private, available и hold приходят всегда, остальные — только если у оффера есть что показать.
| Поле | Описание |
|---|---|
private, available |
Те же поля, что в offer/list. Приватные офферы и офферы по заявке бывают не во всех сетях. |
hold |
Холд в днях: срок, в течение которого выплата по подтверждённому заказу не поступает на счёт. false — холда нет. Приходит всегда. Если для вас задан индивидуальный холд, приходит именно он. |
goal |
Ставки по целям — у офферов с целями. Приходит вместо geo: у оффера есть ровно одно из двух полей. Объект, ключ — символьный код цели. |
goods |
Варианты товара: объект, ключ — ID варианта. Поля нет у офферов без вариантов товара. |
allow |
Разрешённые источники трафика: объект, ключ — ID источника, значение — его название. Поля нет, если оффер не сужает список источников. |
deny |
Запрещённые источники трафика в том же виде. Поля нет, если запрещённых источников нет. |
Дополнительные поля оффера.
Что лежит в goal. Если цели не разбиты по странам, значение — сразу строка ставки с полем code, равным коду цели. Если цели разбиты ещё и по странам, как у оффера 72 в примере выше, значение — объект цели:
| Поле | Описание |
|---|---|
code |
Символьный код цели. |
name |
Название цели. |
price |
Цена конверсии по цели или false, если цена задана не на цели, а на странах. |
currency |
Трёхбуквенный код валюты цены или false, если валюта цели не задана. |
geo |
Ставки по странам этой цели: объект, ключ — двухбуквенный код страны, значение — строка ставки. |
Объект цели.
Объект варианта товара:
| Поле | Описание |
|---|---|
id |
ID варианта. Его подставляют в состав заказа при отправке лида. |
name |
Название варианта. |
tid |
Тип варианта: 0 — основной товар, 1 — дополнительный, 2 — доставка. |
type |
Название типа варианта. |
price |
Цены варианта по странам: объект, ключ — двухбуквенный код страны, значение — цена единицы товара в валюте этой страны. Только страны, для которых цена задана. Если цен нет совсем, приходит пустой массив []. |
Вариант товара.
offer/sitesСайты оффера#
https://lk.dalead.pro/api/offer/sites.json?id={token}Лендинги и прелендинги одного оффера. Функция нужна там, где ставки и товары уже известны, а обновить надо только список сайтов: например, перед созданием потока или чтобы выбрать сайт для скачивания.
Сайты оффера делятся на две группы. Лендинг — целевая страница с формой заказа, именно с неё приходит лид. Прелендинг (прокладка) — промежуточная страница: обзор, статья, тест или новость, которая подводит посетителя к покупке и ведёт его на лендинг. В связке посетитель сначала попадает на прелендинг, оттуда переходит на лендинг. Лендинг в связке обязателен, прелендинг — нет.
Группа land собирает лендинги всех видов: физические сайты сети, страницы-редиректы на сторонний адрес и страницы TDS. Отличить их можно по полю local. Сайты, скрытые из списков, и приватные сайты, к которым у вас нет доступа, в выдачу не попадают. Сайты идут по алфавиту адреса.
Адрес в поле url — адрес самой страницы, это не ссылка для трафика. Он нужен, чтобы посмотреть сайт. Трафик вы льёте по ссылке своего потока (wm/flows), а лендинг и прелендинг выбираете в настройках потока (wm/edit), подставляя ID из этого ответа.
Параметры
| Параметр | Тип | Обяз. | Описание |
|---|---|---|---|
offer | int | да | ID оффера. |
Запрос
https://lk.dalead.pro/api/offer/sites.json?id={token}&offer=68
curl 'https://lk.dalead.pro/api/offer/sites.json?id={token}' \
--data-urlencode 'offer=68'
$url = 'https://lk.dalead.pro/api/offer/sites.json?id={token}';
$data = [
'offer' => 68,
];
$ch = curl_init( $url );
curl_setopt_array( $ch, [
CURLOPT_POST => true,
CURLOPT_POSTFIELDS => http_build_query( $data ),
CURLOPT_RETURNTRANSFER => true,
CURLOPT_TIMEOUT => 30,
]);
$r = json_decode( curl_exec( $ch ), true );
curl_close( $ch );
if ( isset( $r['error'] ) ) error_log( 'API error: ' . $r['error'] );
Ответ
{
"status": "ok",
"land": {
"418": {
"id": 418,
"url": "https://meow.pro/meow-air-purifier-classic-landing/",
"name": "Classic landing",
"epc": 0,
"cr": 0,
"approve": 0,
"mobile": 0,
"default": false,
"local": true,
"archive": true
},
"419": {
"id": 419,
"url": "https://meow.pro/meow-air-purifier-comparison-landing/",
"name": "Comparison landing",
"epc": 0,
"cr": 0,
"approve": 0,
"mobile": 0,
"default": false,
"local": true,
"archive": false
}
},
"space": {
"421": {
"id": 421,
"url": "https://meow.pro/meow-air-purifier-vet-review/",
"name": "Vet review",
"epc": 0,
"cr": 0,
"approve": 0,
"mobile": 0,
"default": false,
"local": true,
"archive": false
}
}
}
{
"status": "ok",
"land": {
"429": {
"id": 429,
"url": "https://meow.pro/tabby-credit-classic-landing/",
"name": "Classic landing",
"epc": 0,
"cr": 0,
"approve": 0,
"mobile": 0,
"default": false,
"local": true,
"archive": false
},
"438": {
"id": 438,
"url": "https://meow.pro/tabby-credit-partner-redirect/",
"name": "Partner redirect",
"epc": 0,
"cr": 0,
"approve": 0,
"mobile": 0,
"default": false,
"local": false,
"archive": false
}
},
"space": {
"431": {
"id": 431,
"url": "https://meow.pro/tabby-credit-money-blog/",
"name": "Money blog",
"epc": 0,
"cr": 0,
"approve": 0,
"mobile": 0,
"default": false,
"local": true,
"archive": false
}
}
}
{
"status": "error",
"error": "access-denied"
}
| Поле | Описание |
|---|---|
status |
Результат операции: ok при успехе, error при ошибке. |
error |
Код ошибки для статуса error (см. ниже). |
land |
Лендинги оффера: объект, ключ — ID сайта. Пустой массив [], если подходящих сайтов нет. |
space |
Прелендинги оффера в том же виде. |
Поля ответа.
Несуществующий ID оффера даёт access-denied, как и недоступный. Оффер, у которого нет подходящих сайтов, даёт ok с двумя пустыми массивами.
Состав объекта сайта:
| Поле | Описание |
|---|---|
id |
ID сайта. Его подставляют в настройки потока, в фильтры статистики и в offer/download. |
url |
Полный адрес сайта со схемой и завершающей косой чертой. |
name |
Название сайта. Может быть пустой строкой. |
epc |
Средний доход с клика по этому сайту в основной валюте сети. |
cr |
Конверсия сайта в процентах. |
approve |
Процент подтверждения по этому сайту. |
mobile |
Мобильность сайта: 0 — не предназначен для мобильных устройств, 1 — перенаправляет на мобильную версию, 2 — оптимизирован для мобильных устройств, 3 — адаптивный дизайн, работает на любых устройствах. |
default |
true, если это сайт оффера по умолчанию: он подставляется в новый поток. |
local |
true, если сайт размещён на серверах сети (лендинг или прелендинг). false — редирект или TDS, ведущие на сторонний адрес. |
archive |
true, если для сайта подготовлен архив и его можно скачать через offer/download. |
Объект сайта.
Ошибки
| Код | Что случилось | Что делать |
|---|---|---|
no-offer | Не передан параметр offer или он равен нулю. | Передайте ID оффера. |
access-denied | Каталог офферов скрыт от вебмастеров настройками сети, оффера нет или вам не разрешено работать с ним. | Проверьте available в offer/list. |
offer/downloadСкачать сайт оффера#
https://lk.dalead.pro/api/offer/download.json?id={token}Отдаёт лендинг или прелендинг оффера готовым ZIP-архивом: сайт, который можно развернуть на своём хостинге и вести на него трафик. Подходят сайты с archive: true в ответе offer/sites. То же самое делает кнопка скачивания в кабинете: Скачивание готовых сайтов.
Архив собирается лично для вас. Если передать flow, он привязывается к вашему потоку: в страницы попадают пиксели и код заголовка и подвала из настроек потока, цены, метки потока и счётчик визитов, а к лендингу добавляется api.php, который отправляет заказы от вашего имени. Архив собирается заново на каждый запрос, поэтому после смены настроек потока скачайте его ещё раз. Только агентство: api.php и счётчик визитов добавляются и без flow, подробнее — в предупреждении ниже.
Файл api.php в архиве с flow отправляет заказы от вашего имени, а ваш токен записан в нём открытым текстом, в адресах запросов. Токен открывает весь ваш API: статистику, лиды и потоки. Поэтому такой архив — личный:
- Не публикуйте архив и его файлы: не выкладывайте их в чаты, на файлообменники, в репозитории и общие папки.
- Размещайте архив только на своём хостинге. Не загружайте его в трекеры и на хостинги, к которым есть доступ у других людей.
- После распаковки удалите с хостинга сам
.zip, если он лежит в папке, доступной по адресу сайта. - Если архив мог попасть в чужие руки, сбросьте ключ API в профиле: прежний токен сразу перестанет работать, а скачанные архивы придётся получить заново.
В архиве без flow у вебмастера файла api.php нет, токена в нём тоже нет.
Только агентство: api.php есть в лендинге и без flow. Он отправляет заказы по офферу сайта, а токен агентства записан в нём так же открытым текстом, поэтому такой архив тоже личный. Счётчик визитов у агентства стоит в страницах и без flow.
Заказы с лендинга уходят через leads/add, поэтому действуют его условия: вам должна быть разрешена отправка лидов по API, а оффер должен принимать лиды по API. Прелендинг заказов не отправляет, ему это не нужно.
Параметры
| Параметр | Тип | Обяз. | Описание |
|---|---|---|---|
site | int | да | ID лендинга или прелендинга из offer/sites. У сайта должен быть готовый архив (archive: true). |
flow | int | — | ID вашего потока. Поток должен быть по тому же офферу, что и сайт. Поток по другому офферу сеть принимает без ошибки, но цены и название берутся по офферу потока, а не сайта, поэтому выходят пустыми или чужими, и api.php отправляет заказы по офферу потока. Без flow у вебмастера в лендинге нет api.php и не подставляются цены и название оффера (у агентства api.php есть и без него, см. Что внутри архива). Чужой или несуществующий поток молча игнорируется, архив собирается как без flow. |
tracker | int | — | Трекер, под который готовится архив: от 0 до 6, см. раздел Трекеры. По умолчанию 0. Значение вне диапазона от 0 до 6 в страницах действует как 0, но addtracker с ним не работает: он включается, только когда tracker не передан или равен нулю. |
addtracker | bool | — | Встроить в страницы проверку посетителя по настройкам потока (трекер и клоака) и положить в архив белый сайт потока, если он задан. Работает только вместе с flow и без tracker. Передавайте 1. |
geo | string | — | Двухбуквенный код страны для подстановки цен и валюты, например pl. Регистр не важен: PL и pl дают одно и то же. По умолчанию берётся первая страна из country оффера. У оффера на весь мир (country: ["ww"]) страны по умолчанию нет: без geo ничего не подставляется, и метки остаются в страницах как есть. Если передать geo пустым, метки тоже остаются неподставленными. Если у оффера нет цены для этой страны или код неизвестен, цена остаётся пустой, а валюта подставляется всё равно (для неизвестного кода — основная валюта сети). |
short | bool | — | Пиксели без JavaScript: вместо скриптов вставляются картинки-пиксели, они быстрее грузятся. Передавайте 1. |
nopage | bool | — | Пиксели только на странице «Спасибо». На самих страницах сайта остаётся лишь код, который запоминает идентификаторы пикселей. Передавайте 1. |
nopixel | bool | — | Не добавлять пиксели совсем. Передавайте 1. |
Для short, nopage и nopixel включением считается любое значение, кроме пустого и 0, в том числе слово false. Чтобы выключить параметр, не передавайте его совсем.
Запрос
https://lk.dalead.pro/api/offer/download.json?id={token}&site=404&flow=80
curl -o site.zip 'https://lk.dalead.pro/api/offer/download.json?id={token}' \
--data-urlencode 'site=404' \
--data-urlencode 'flow=80'
// Лендинг для своего потока
$url = 'https://lk.dalead.pro/api/offer/download.json?id={token}';
$data = [
'site' => 404,
'flow' => 80,
];
$ch = curl_init( $url );
curl_setopt_array( $ch, [
CURLOPT_POST => true,
CURLOPT_POSTFIELDS => http_build_query( $data ),
CURLOPT_RETURNTRANSFER => true,
CURLOPT_TIMEOUT => 30,
]);
$body = curl_exec( $ch );
$r = json_decode( $body, true );
curl_close( $ch );
if ( isset( $r['error'] ) ) error_log( 'API error: ' . $r['error'] );
else file_put_contents( 'site.zip', $body );
https://lk.dalead.pro/api/offer/download.json?id={token}&site=404&flow=81&tracker=1&geo=pl
curl -o site.zip 'https://lk.dalead.pro/api/offer/download.json?id={token}' \
--data-urlencode 'site=404' \
--data-urlencode 'flow=81' \
--data-urlencode 'tracker=1' \
--data-urlencode 'geo=pl'
// Под Keitaro (subid), цены для Польши
$url = 'https://lk.dalead.pro/api/offer/download.json?id={token}';
$data = [
'site' => 404,
'flow' => 81,
'tracker' => 1,
'geo' => 'pl',
];
$ch = curl_init( $url );
curl_setopt_array( $ch, [
CURLOPT_POST => true,
CURLOPT_POSTFIELDS => http_build_query( $data ),
CURLOPT_RETURNTRANSFER => true,
CURLOPT_TIMEOUT => 30,
]);
$body = curl_exec( $ch );
$r = json_decode( $body, true );
curl_close( $ch );
if ( isset( $r['error'] ) ) error_log( 'API error: ' . $r['error'] );
else file_put_contents( 'site.zip', $body );
https://lk.dalead.pro/api/offer/download.json?id={token}&site=404&flow=80&short=1&nopage=1
curl -o site.zip 'https://lk.dalead.pro/api/offer/download.json?id={token}' \
--data-urlencode 'site=404' \
--data-urlencode 'flow=80' \
--data-urlencode 'short=1' \
--data-urlencode 'nopage=1'
// Лендинг: пиксели без JavaScript и только на странице «Спасибо»
$url = 'https://lk.dalead.pro/api/offer/download.json?id={token}';
$data = [
'site' => 404,
'flow' => 80,
'short' => 1,
'nopage' => 1,
];
$ch = curl_init( $url );
curl_setopt_array( $ch, [
CURLOPT_POST => true,
CURLOPT_POSTFIELDS => http_build_query( $data ),
CURLOPT_RETURNTRANSFER => true,
CURLOPT_TIMEOUT => 30,
]);
$body = curl_exec( $ch );
$r = json_decode( $body, true );
curl_close( $ch );
if ( isset( $r['error'] ) ) error_log( 'API error: ' . $r['error'] );
else file_put_contents( 'site.zip', $body );
https://lk.dalead.pro/api/offer/download.json?id={token}&site=426&flow=92&tracker=4
curl -o site.zip 'https://lk.dalead.pro/api/offer/download.json?id={token}' \
--data-urlencode 'site=426' \
--data-urlencode 'flow=92' \
--data-urlencode 'tracker=4'
// Лендинг под Binom (clickid)
$url = 'https://lk.dalead.pro/api/offer/download.json?id={token}';
$data = [
'site' => 426,
'flow' => 92,
'tracker' => 4,
];
$ch = curl_init( $url );
curl_setopt_array( $ch, [
CURLOPT_POST => true,
CURLOPT_POSTFIELDS => http_build_query( $data ),
CURLOPT_RETURNTRANSFER => true,
CURLOPT_TIMEOUT => 30,
]);
$body = curl_exec( $ch );
$r = json_decode( $body, true );
curl_close( $ch );
if ( isset( $r['error'] ) ) error_log( 'API error: ' . $r['error'] );
else file_put_contents( 'site.zip', $body );
Ответ
Успешный ответ — сам ZIP-файл с заголовком Content-Type: application/zip, без конверта со status. Имя файла сервер не задаёт, поэтому сохраните ответ под любым именем, как в примерах выше (site.zip). Расширение в адресе (.json, .xml) на успешный ответ не влияет. Ошибка приходит обычным конвертом в формате, который задаёт расширение: при .json это JSON с Content-Type: application/json, при .xml — XML с Content-Type: application/xml. HTTP-код при этом остаётся 200 (подробнее о конверте). Поэтому архив и ошибку отличайте по Content-Type, а не по HTTP-коду.
{
"status": "error",
"error": "no-archive"
}
{
"status": "error",
"error": "no-site"
}
Ошибки
| Код | Что случилось | Что делать |
|---|---|---|
no-site | Не передан параметр site или он равен нулю. | Передайте ID сайта из offer/sites. |
no-archive | У сайта нет готового архива, такого сайта нет или файл архива недоступен. | Выберите сайт с archive: true. Если ошибка осталась и у такого сайта, сообщите в поддержку сети. |
inactive | Оффер сайта отключён. | Выберите сайт другого оффера. |
access-denied | Оффер или сайт вам недоступны. | Проверьте available оффера в offer/list. |
Ошибки входа в API (key, ban и другие) общие для всех функций: Общие правила API.
Подстановка цен и названия
В исходных сайтах цены и название оффера стоят метками [PRICE], [OLDPRICE], [DISCOUNT], [CURRENCY], [GEO] и [OFFERNAME] (для варианта товара — [PRICE<ID варианта>] и так далее). При скачивании метки заменяются значениями: ценой, старой ценой, скидкой в процентах, валютой и страной. Цену берут из ваших цен потока, а если их нет, из цен оффера для выбранной страны. Страну задаёт параметр geo, по умолчанию это первая страна оффера. У оффера на весь мир страны по умолчанию нет, и без geo метки не заменяются совсем. Цены и название оффера берутся по офферу вашего потока, поэтому без flow эти места остаются пустыми, а [CURRENCY] и [GEO] всё равно заполняются. Место цены пустое и тогда, когда geo указан неверно или у оффера нет цены для этой страны. Метки в квадратных скобках остаются в страницах, только когда страна не определена (geo передан пустым или оффер на весь мир скачан без geo).
Трекеры
Если вы ведёте трафик через трекер, параметр tracker готовит архив под него: в каждую форму добавляется скрытое поле с макросом трекера, а ссылки прелендинга ведут на макрос трекера вместо адреса сети. Макросы в фигурных скобках заменяет сам трекер, когда отдаёт страницу посетителю. Если страницы лежат просто на хостинге, макросы останутся в них как есть. Как подключить сайт к трекеру, написано в разделе Сторонние трекеры.
tracker |
Трекер | Скрытое поле в формах | Ссылка прелендинга |
|---|---|---|---|
0 |
любой | не добавляется. Если в настройке потока SubID стоит {subid}, добавляется subid = {subid} |
адрес сети |
1 |
Keitaro (subid) | subid = {subid} |
{offer} |
2 |
Keitaro (utm_term) | utm_term = {subid} |
{offer} |
3 |
Keitaro (utm_medium) | utm_medium = {subid} |
{offer} |
4 |
Binom (clickid) | subid = {clickid} |
{offer_link} |
5 |
Binom (clickid+campaign) | subid = {clickid}, utm_campaign = {campaign} |
{offer_link} |
6 |
AlterCPA Red | sub1 = {click} |
адрес сети |
Значения параметра tracker.
Что внутри архива
Файлы сайта лежат прямо в корне архива, общей папки нет. Вот что получается у лендинга, скачанного с flow:
api.php
index.php
style.css
success.php
В этом примере у сайта одна страница, index.php, а оформление лежит в одном файле style.css. У вашего сайта страниц, папок и файлов может быть больше.
| Файл | Что это |
|---|---|
index.php и другие .php в корне |
Страницы сайта. В каждую подставлены цены, название оффера и страна, пиксели и коды потока, скрытые поля трекера. Форма отправляется на api.php вместе со всеми метками из адреса страницы. |
success.php |
Страница «Спасибо», на которую api.php отправляет посетителя после заказа. Берётся из сайта, а если в сайте её нет, подставляется стандартная. Есть у каждого лендинга. У прелендинга она есть, только если была в исходном сайте. |
api.php |
Принимает форму и передаёт заказ в leads/add от имени вашего потока, подставляя метки потока (например, utm_source), если посетитель пришёл без них. Есть только в лендинге, скачанном с flow. Содержит ваш токен. Только агентство: файл есть и без flow, с токеном агентства. |
Остальные папки и файлы (css, images, js, fonts) |
Оформление сайта, без изменений. Файлы в подпапках архив не трогает. |
| Папка белого сайта | Только при addtracker, если в потоке задан белый сайт. |
Файлы архива.
Что добавляется к страницам:
- Пиксели и счётчики из настроек потока: идентификатор можно также передать в адресе страницы, например
?fb=123456789012345, он запомнится в cookie на 30 дней. Подробнее — в разделе Метки и пиксели. - Коды заголовка и подвала из настроек потока. Блок между
<!--site-->и<!--/site-->попадает только на страницы сайта, а блок между<!--thanks-->и<!--/thanks-->— только на страницу «Спасибо». - Метки потока в
api.php:utm_sourceи другие, заданные в потоке, добавляются к заказу, если посетитель пришёл без них. - Счётчик визитов: в конце каждой страницы стоит запрос к сети, чтобы визит был засчитан в статистике потока. Без
flowего нет. Только агентство: он стоит и безflow. - К прелендингу
api.phpне добавляется. Вместо него в начале страниц задан адрес для ссылок: адрес этого прелендинга в сети с номером вашего потока (flow) и признакомfrom. По ним сеть узнаёт, от какого потока и с какого сайта пришёл посетитель. Безflowвместо номера потока в этой ссылке остаётся заглушкаXXX. Только агентство: вместоXXXв ссылке стоит номер подключения агентства (exti). - При
addtrackerв начало каждой страницы встраивается проверка посетителя по настройкам фильтрации и трафикбека потока: страница показывает сайт, белую страницу или перенаправляет посетителя.
Если сеть не приняла заказ, посетитель всё равно попадёт на success.php, но в адресе будут status=error и код ошибки из leads/add, а пиксели на странице не сработают.
Как установить на хостинг
-
Подготовьте хостинг.
Нужен хостинг или сервер с PHP и расширением cURL, на котором работает ваш домен. Для лендинга с хостинга должны быть разрешены исходящие запросы:
api.phpобращается к API вашей сети. -
Распакуйте архив в папку сайта.
Положите содержимое архива в корень сайта или в нужную подпапку так, чтобы
index.php,success.phpиapi.phpлежали в одной папке. Общей папки внутри архива нет, поэтому распаковывайте его сразу в папку сайта. Берите пустую папку: файлы архива перезапишут одноимённые, прежде всегоindex.phpиsuccess.php, и другой сайт в этой папке сломается. Сам.zipпосле этого удалите. -
Откройте сайт в браузере.
Страница должна открыться с ценой, валютой и названием оффера. Пустое место вместо цены значит, что архив скачан без
flow, неверно указана странаgeoили для неё у оффера нет цены. Метки в квадратных скобках ([PRICE]) остаются, только когда страна не определена:geoпередан пустым, либо оффер на весь мир скачан безgeo. В любом из этих случаев скачайте архив заново. -
Ведите трафик на адрес своего сайта.
Метки из адреса (
utm_source,subidи другие) страницы подхватывают сами и передают вместе с заказом. Если вы работаете через трекер, загрузите страницы только в свой трекер, доступа к которому нет у других людей: вapi.phpлежит ваш токен. Нужное значениеtrackerукажите при скачивании. -
Проверьте отправку заказа.
Отправьте заказ через форму и убедитесь, что после неё открылась страница «Спасибо», а заказ появился в списке лидов. Для повторных проверок есть служебный номер, он описан в разделе Как гонять тесты подряд.