На этой странице
API позволяет работать с сетью из своих скриптов и сервисов: отправлять лиды, забирать статистику, управлять потоками и читать каталог офферов. Прав у запроса ровно столько же, сколько у вашей учётной записи в кабинете: вы видите и меняете только свои данные. На этой странице — как сделать первый запрос и правила, одинаковые для всех функций. Сами функции описаны на отдельных страницах, ссылки на них в конце.
Первый запрос за две минуты#
Чтобы убедиться, что доступ работает, не нужны ни программа, ни скрипт: достаточно браузера.
Пока вы не вошли в кабинет, в примерах справки вместо вашего токена стоит запись {token}. Войдите в кабинет, и справка подставит в примеры ваш собственный токен: адрес можно будет скопировать и открыть как есть.
В примерах справки уже стоит ваш собственный токен, поэтому адреса можно копировать и открывать как есть. Не публикуйте такие адреса и не пересылайте их другим: см. Токен.
-
Найдите токен Откройте в кабинете профиль и найдите заголовок API-интерфейс. В поле API токен лежит ваш токен: номер вашей учётной записи и ключ через дефис, вида
{user}-{key}. -
Составьте адрес запроса Для первого раза возьмите список офферов: функция
offer/namesне требует параметров. Адрес — это адрес API сети, имя разделаoffer, имя функцииnames, формат ответаjsonи ваш токен в параметреid:https://lk.dalead.pro/api/offer/names.json?id={token} -
Откройте адрес в браузере Вставьте адрес в строку браузера. Вместо страницы вы увидите ответ в формате JSON: список ваших офферов, где число слева — номер оффера, а справа — его название. Номера пригодятся, когда вы начнёте отправлять лиды.
JSON{ "status": "ok", "data": { "24": "Hevital BabyBOOM", "31": "Meow Nutra", "2": "Waist Trainer" } }Ответ сокращён: в настоящем будут все офферы, доступные вам. То же самое можно сделать из командной строки:
BASHcurl 'https://lk.dalead.pro/api/offer/names.json?id={token}'
Если вместо списка пришла ошибка, смотрите поле error:
key— токен не передан или не подошёл. Проверьте, что скопировали его целиком и без пробелов, и что не сбрасывали ключ в профиле после этого.access-denied— сеть скрыла от вебмастеров каталог офферов. Работу токена можно проверить другим запросом,wm/flows(см. Потоки): он ответит списком ваших потоков или, если потоков ещё нет, пустым[].func,request— в адресе опечатка, см. Ошибки.
Адрес запроса#
Запрос состоит из адреса API вашей сети и трёх частей: приложения, функции и формата ответа. Приложение — раздел API, функция — действие внутри раздела, формат — расширение, дописанное к имени функции через точку. Токен всегда идёт в параметре id.
https://lk.dalead.pro/api/{app}/{func}.{format}?id={token}
| Приложение | Что делает | Страница |
|---|---|---|
leads |
Отправка лидов и проверка их статусов | Лиды |
wm |
Статистика, потоки и расходы | Статистика, Потоки |
offer |
Каталог офферов и архивы сайтов | Офферы |
Приложения API, описанные в этой справке.
Приложение, функция и формат обязательны все вместе. Если не хватает хотя бы одной части (например, к имени функции забыли дописать .json), платформа отвечает ошибкой request, не вызывая функцию.
Регистр в именах приложения, функции и формата не важен: /api/OFFER/Names.JSON работает так же, как /api/offer/names.json. Имена параметров регистр учитывают, поэтому пишите их так, как они указаны в описании функции. Исключение — добавление лида: там имена полей приводятся к нижнему регистру, потому что данные приходят из чужих форм.
Токен#
Доступ к API есть у любой учётной записи, включать его отдельно не нужно. Кроме отправки лидов — её запросите у своего менеджера. Токен состоит из номера вашей учётной записи ({user}) и ключа API: 32 знака, цифры и латинские буквы a–f. Они пишутся через дефис. Ваш токен целиком — {token}.
Токен передаётся в параметре id строки запроса, в каждом запросе: ?id={token}. Без токена или с неверным токеном платформа отвечает ошибкой key. Если учётная запись заблокирована или отключена, ответ — ошибка ban.
Ключ лежит в профиле, в поле API токен под заголовком API-интерфейс. Там же находится ссылка Сгенерировать новый API-токен: после подтверждения старый ключ сразу перестаёт работать, а номер учётной записи остаётся прежним. Обновите токен во всех своих скриптах и на всех сайтах, где он вписан. Подробнее — на странице Аккаунт и ключ API.
Токен даёт доступ к API от вашего имени, в том числе к отправке лидов и изменению потоков. Не публикуйте адреса с токеном, не вставляйте их в страницы, которые видят посетители, и не пересылайте в чатах. Если токен попал не туда, сбросьте его в профиле.
Как отправлять запрос#
Большинство функций можно вызвать и методом GET, и методом POST. Читающие функции удобно вызывать запросом GET, а отправляющие данные лучше слать методом POST: длина адреса ограничена.
Параметры можно передать тремя способами:
- в строке запроса — прямо в адресе:
?offer=31&phone=79001234567; - формой — телом POST-запроса в формате
application/x-www-form-urlencoded; - JSON — телом запроса в формате JSON с заголовком
Content-Type: application/json. Платформа разберёт его и разложит по тем же полям, что и форму. Токен при этом по-прежнему передаётся в строке запроса.
Если один и тот же параметр пришёл и в адресе, и в теле запроса, побеждает тело.
Метка запроса
К любому запросу можно добавить метку: параметр z в строке запроса, например ...&z=meow-landing. Платформа записывает её в журнал API-запросов вместе с самим запросом (журнал включён по умолчанию). Журнал ведёт сеть, вы его не видите, но метка выручает, когда с одним токеном работает несколько лендингов или скриптов: назовите в поддержке метку и время запроса, и администратору проще найти запрос, о котором речь.
В метке остаются латинские буквы (в нижнем регистре), цифры, дефис, подчёркивание и точка. Пробелы превращаются в дефисы, русские буквы заменяются латиницей, остальные знаки отбрасываются: метка Meow Привет! будет записана как meow-privet.
Лимиты и хорошие манеры#
В платформе нет ограничения на частоту и число API-запросов: ни в минуту, ни в сутки. Версий у API тоже нет, в адресе функции нет номера версии. Но каждый запрос — это нагрузка на сеть, которую делят все вебмастера, поэтому:
- каталог офферов (
offer/list,offer/names,offer/show) сохраняйте у себя и обновляйте по расписанию, а не перед каждой операцией,offer/showзапрашивайте по одному офферу; - о смене статуса лидов узнавайте из постбеков потока (см. Постбеки), а
leads/listиспользуйте для выборочной сверки и сужайте датами; - добавляйте к запросам метку
z, чтобы при разборе ошибок было видно, какой скрипт их прислал.
Отдельно от API действуют правила приёма лидов: защита от дублей и массовой отправки с одного IP-адреса, фильтры трафика. Они срабатывают при добавлении лида и описаны на странице Лиды.
Формат ответа#
Формат ответа задаётся расширением в адресе функции. Во всех примерах справки используется json: его и берите для работы.
| Формат | Ответ |
|---|---|
json |
JSON в кодировке UTF-8, русские буквы не экранируются. Основной формат. |
json-pretty |
Тот же JSON, но красивенький. |
xml |
XML с корневым элементом <result>. Записи списка получают то же имя, что и сам список (<data><data>…</data></data>), а в ответах вида «номер оффера — название», как у offer/names, имена элементов получаются числовыми (<31>), а такие имена в XML недопустимы, поэтому многие программы не смогут прочитать этот ответ. |
text |
Строка запроса вида status=ok&data%5B31%5D=Meow+Nutra, результат http_build_query(): вложенные значения записаны в квадратных скобках, всё закодировано. |
Форматы ответа.
Незнакомое расширение ошибкой не считается: ответ придёт в красивом JSON с отступами и переносами строк, чтобы его было удобно читать глазами.
Конверт ответа
Почти все функции отвечают объектом, который начинается с поля status: его значение ok или error. Это «конверт» ответа. При успехе остальные поля зависят от функции. При ошибке в поле error приходит её код, а иногда и уточнения: info — причина, bad — список проблемных полей, message — текст ошибки стороннего сервиса.
{
"status": "error",
"error": "key"
}
Некоторые функции отдают данные без конверта: сводная статистика и статистика с группировкой (wm/stats, wm/click) и список потоков (wm/flows) возвращают сразу данные, поля status в них нет, а пустой результат выглядит как []. Ошибки этих функций приходят в обычном конверте. Есть ли конверт у функции, сказано на странице функции.
Результат дублируется в заголовках ответа, и это надёжнее всего для функций без конверта: X-API-Status содержит ok или error, X-API-Error — код ошибки, если она была, а X-Status — код HTTP, которым платформа ответила бы на ошибку (200 или 400).
HTTP/1.1 200 OK
Content-Type: application/json; charset=utf-8
X-Status: 400
X-API-Status: error
X-API-Error: key
Сам HTTP-код при этом всегда 200, чтобы ответ дошёл до клиентов, которые не читают тело ошибочного ответа. Если вам удобнее ловить ошибки по коду HTTP, добавьте в строку запроса параметр statuscode=1: тогда ошибка придёт с кодом 400, а успех по-прежнему с 200.
Ошибки#
Прежде чем дело дойдёт до функции, запрос проходит через вход в API. Его ошибки одинаковы для всех функций.
| Код | Что случилось | Что делать |
|---|---|---|
request |
В адресе не хватает приложения, функции или формата ответа. | Проверьте адрес: он должен выглядеть как /api/{app}/{func}.json. |
func |
Такого приложения или функции нет. | Проверьте написание: имена приложений и функций — в таблице выше и на страницах функций. |
key |
Токен не передан или не подходит. | Передайте токен в параметре id. Если вы сбрасывали ключ в профиле, возьмите новый токен. |
ban |
Учётная запись заблокирована или отключена. | Обратитесь к администратору сети. |
bot |
Запрос пришёл от бота, который открывает ссылки для предпросмотра (Telegram, [Skype], Twitter), функция не выполнялась. | Не пересылайте адреса с токеном в мессенджерах. Если токен попал в чат, сбросьте его в профиле. |
Ошибки входа в API.
Коды ошибок самих функций описаны на страницах функций. Два кода встречаются почти везде и означают «нельзя»: access — у вас нет права на действие или поток чужой, access-denied — функция или данные для вас закрыты (например, сеть скрыла каталог офферов, оффер вам недоступен или функция предназначена другой роли).
Справочники значений#
Перечисления ниже общие для всего API. На них ссылаются страницы Лиды, Статистика и руководство Постбеки. Числа и символьные коды не зависят от языка интерфейса.
Фазы заказа
Фаза — состояние заказа с точки зрения вебмастера, от неё зависят ваши деньги. Она есть в любой сети и приходит числом в поле phase и символьным кодом в поле stage. Те же значения подставляются в макросы постбеков {phase} и {stage}.
| Код | Символ | В кабинете | Значение |
|---|---|---|---|
1 |
wait |
Ожидает | Лид в обработке, решение по нему ещё не принято. |
2 |
hold |
Холд | Лид принят, но выплата по нему ещё не проведена: она ждёт конца срока холда или выкупа заказа. |
3 |
approve |
Принят | Лид подтверждён, вознаграждение начислено. |
4 |
cancel |
Отмена | Лид отклонён по обычной причине. Такой отказ считается в проценте аппрува. |
5 |
trash |
Треш | Лид отклонён как невалидный: неверный номер, тест, дубль и тому подобное. В проценте аппрува среди валидных лидов не учитывается. |
Фазы заказа.
Статусы заказа
Статус — шаг обработки заказа в CRM сети: от создания до выкупа или отказа. Фаза и статус описывают одно состояние заказа: фаза — для вебмастера и денег, статус — подробнее. Какую фазу даёт статус, зависит от модели оплаты оффера, см. ниже.
Статусов двенадцать, их коды — от 1 до 12. Основные есть в любом оффере. Дополнительные, подробные шаги обзвона и доставки, характерны только для товарных сетей.
| Код | Название | Значение |
|---|---|---|
1 |
Новый | Заказ создан и ещё не взят в обработку. |
2 |
Обработка | Заказ в работе. |
3 |
Перезвонить | С покупателем не удалось поговорить, назначен повторный звонок. |
4 |
Холд | Заказ подтверждён, но выплата по нему ещё не проведена. |
5 |
Отменён | Заказ отклонён, причина отказа передаётся отдельным полем. |
6 |
Упаковка | Заказ подтверждён и передан на склад. |
7 |
Отправка | Заказ передан службе доставки. |
8 |
В пути | Посылка едет к покупателю. |
9 |
Доставлен | Посылка доставлена в пункт выдачи или до двери. |
10 |
Оплачен | Покупатель выкупил заказ, деньги получены. |
11 |
Возврат | Покупатель отказался от посылки или вернул её. |
12 |
Удалён | Заказ удалён из работы, он попадает в фазу «Треш». |
Коды статусов.
Код статуса приходит в поле crm ответа leads/list: это статус заказа в CRM, код из справочника выше. Функция wm/stats считает заказы по статусам в полях c1–c12.
В моделях cps, cod, cor заказ в статусе 5 попадает в «Треш», если его причина отказа входит в набор треш-причин, и в «Отмену» в остальных случаях: см. Причины отказа. В моделях cpl, cpv, cpa статус 5 с обычной причиной даёт фазу «Принят»: см. таблицу ниже.
Как статус становится фазой
Фазу заказа определяет его статус и модель оплаты оффера. Модель — поле model в каталоге офферов: cps, cpl, cpv, cpa, cod или cor; модель cpx работает как cps. Сеть может назначить другую модель отдельной цели, вебмастеру или команде. В таблице — коды статусов, которые модель переводит в каждую фазу.
| Модель | Ожидает | Холд | Принят | Отмена | Треш |
|---|---|---|---|---|---|
cps |
1, 2, 3 | 4 | 6–11 | 5 | 12; 5 с треш-причиной |
cpl |
1, 2, 3 | — | 4, 6–11; 5 с обычной причиной | — | 12; 5 с треш-причиной |
cpv |
1 | — | 2–4, 6–11; 5 с обычной причиной | — | 12; 5 с треш-причиной |
cpa |
1 | — | 2–4, 6–11; 5 с любой причиной | — | 12 |
cod |
1, 2, 3 | 4, 6–9 | 10 | 5, 11 | 12; 5 с треш-причиной |
cor |
1, 2, 3 | 4, 6–9 | 10, 11 | 5 | 12; 5 с треш-причиной |
Модели оплаты: из какого статуса какая фаза. Статус 5 разобран по причине отказа.
Если у оффера задан срок холда, заказ, который по модели должен стать «Принят», сначала попадает в «Холд» на этот срок и затем подтверждается автоматически.
Причины отказа
Причина отказа приходит в поле reason и нужна только отменённым заказам, то есть заказам в статусе 5. Значение 0 — причина не указана. Причина из набора треш-причин переводит отмену в фазу «Треш» (кроме модели cpa), и такой заказ не считается в проценте аппрува среди валидных лидов.
Набор треш-причин задаёт сеть. В таблице отмечен стандартный набор, с которым система устанавливается: сеть могла его изменить. Поэтому ориентируйтесь на фазу заказа: заказ с причиной из набора сети приходит в фазе 5 (trash).
| Код | Значение | Треш по умолчанию |
|---|---|---|
1 |
Некорректный номер | да |
2 |
Передумал | — |
3 |
Не заказывал | да |
4 |
Требует сертификат | — |
5 |
Неверное ГЕО | да |
6 |
Треш или тест | да |
7 |
Дублированный заказ | да |
8 |
Заказал в другом месте | да |
9 |
Дорого | — |
10 |
Не устраивает доставка | — |
11 |
Не удалось дозвониться | да |
12 |
Подозрения на фрод | да |
13 |
Не говорит на языке колл-центра | да |
14 |
Товар не подошел | да |
15 |
Оффер отключен | — |
16 |
Консультация | — |
17 |
Отклонён по таймеру | — |
18 |
Чёрный список | да |
19 |
Мисслид или неверный таргет | да |
Причины отказа и стандартный набор треш-причин.
Куда дальше#
- Лиды — отправить лид и проверить статусы отправленных;
- Статистика — сводка по дням и срезы по любому признаку;
- Потоки — список, создание, настройка и удаление потоков, загрузка расходов;
- Офферы — каталог, цены, лендинги и архив готового сайта.
Как устроены ключ и профиль в кабинете — в разделе Аккаунт и ключ API, а когда платформа сама сообщает о смене статуса лида — в разделе Постбеки.