WatchCatAlterCPA
WatchCat / API

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

JSON-интерфейс мониторинга: лента изменений, каталог и поиск офферов, приватные офферы, подписки на офферы и сети, статистика сетей.

01 Введение и авторизация

Запросы к API осуществляются по протоколу HTTPS. Базовый адрес функции — https://cpaw.cat/api/cpaw/<функция>.json. Расширение формата обязательно (.json).

Параметры можно передавать в GET или в POST. Ответ всегда выдаётся в формате JSON в кодировке UTF-8, HTTP-статус ответа всегда 200.

В тексте параметры-плейсхолдеры показаны в фигурных скобках: {id} — строка авторизации, {offer} — идентификатор оффера, {network} — идентификатор сети. В реальных запросах фигурные скобки не используются — только сами значения.

Авторизация

Ключ передаётся в параметре id в виде <идентификатор>-<ключ>:

GEThttps://cpaw.cat/api/cpaw/feed.json?id=1234-a1b2c3d4e5f6g7h8i9j0klmnopqrstuv&feed=all
  • <идентификатор> — числовой ID вашего пользователя;
  • <ключ> — ваш персональный API-ключ.
Внимание! Никому не передавайте свой API-ключ и не указывайте его в сторонних сервисах — по нему можно получить доступ ко всей вашей приватной информации в сервисе.
Вернуться к оглавлению

02 Формат ответа

Успешный ответ содержит поле status: ok и данные в поле data:

{
    "status": "ok",
    "data": { "...": "..." }
}

Функция offers дополнительно возвращает рядом блок навигации nav — его состав описан в её разделе. Остальные функции отдают всё разом, без постраничной разбивки.

Вернуться к оглавлению

03 Обработка ошибок

При ошибке ответ содержит status: error и поле error с кодом ошибки:

{
    "status": "error",
    "error": "auth"
}

Общие коды ошибок:

  • auth — API-ключ не подходит;
  • ban — пользователь заблокирован;
  • access — доступ к выбранному ресурсу закрыт;
  • request — некорректный запрос (например, не указано расширение формата);
  • not-found — запрошенный объект не найден.

Каждая функция может возвращать и свои собственные коды ошибок, описанные в её разделе.

Вернуться к оглавлению

04 Типы событий

Идентификаторы типов событий применяются в запросах и ответах функций feed и offer:

IDСобытиеIDСобытие
1Новый оффер9Изменилась цена
2Оффер отключён10Изменилось отчисление
3Оффер активирован11Изменился апсейл
4Новая цель12Изменился кросс-сейл
5Цель отключена13Изменился процент
6Цель активирована14Изменилась валюта
7Изменился тип15Изменилось название оффера
8Изменился холд16Изменилось название цели
Вернуться к оглавлению

05 feed — Лента обновлений

GET · POSThttps://cpaw.cat/api/cpaw/feed.json?id={id}&feed=all

Возвращает события ленты за указанный период. Максимум 1000 событий в ответе, отсортированы от самого свежего (по убыванию id).

Параметры

ПолеОписание
feedТип ленты: all — все публичные события; offer — мои офферы; subs — мои подписки. По умолчанию — мой мониторинг (мои офферы + мои подписки).
fromНачало выборки: дата ГГГГ-ММ-ДД или Unix Timestamp.
toКонец выборки: дата ГГГГ-ММ-ДД или Unix Timestamp.
afterID последнего изменения, после которого начать выгрузку.
searchURL оффера в партнёрской сети для поиска.
networkИдентификатор партнёрской сети.
offerИдентификатор оффера на стороне WatchCat.
goalИдентификатор цели на стороне WatchCat.
typeИдентификатор типа события.
Для регулярной выгрузки в свою систему используйте after вместо дат. После каждой выгрузки сохраняйте наибольший id изменения (всегда идёт первым в списке) и передавайте его в after при следующем запросе.

Ответ

Поле data содержит массив событий (лента упорядочена по времени). Поля каждого события:

ПолеОписание
idИдентификатор изменения.
timeВремя события, Unix Timestamp.
tidТип события, число.
nidИдентификатор сети.
oidИдентификатор оффера.
gidИдентификатор цели (0, если событие не о цели).
dateДата события, ГГГГ-ММ-ДД ЧЧ:ММ:СС.
typeНазвание типа события.
networkНазвание сети.
offerНазвание оффера.
goalНазвание цели или false.
valueНовое значение или false.
oldСтарое значение или false.
urlАдрес оффера в WatchCat.
mytrue — персональный оффер, false — публичный.
{
    "status": "ok",
    "data": [
        {
            "id": 35400, "time": 1573291851, "tid": 4,
            "nid": 16, "oid": 6113, "gid": 19304,
            "date": "2019-11-09 09:30:51", "type": "Новая цель",
            "network": "Admitad", "offer": "Едадил [CPI, Android] RU",
            "goal": "Install on Android",
            "value": false, "old": false,
            "url": "https://cpaw.cat/offer/6113", "my": false
        }
    ]
}
Вернуться к оглавлению

06 network — Список сетей

GET · POSThttps://cpaw.cat/api/cpaw/network.json?id={id}

Показывает список доступных для работы сетей. Входящих параметров нет. data — объект, ключ — идентификатор сети, значение — объект с полями:

ПолеОписание
idИдентификатор сети.
nameНазвание.
domainДомен для распознавания ссылок на офферы.
privateСеть приватная, доступна только VIP. Поле присутствует только у VIP-пользователей.
offerСеть поддерживает добавление своих приватных офферов.
favИзбранная сеть (выводится на дашборде).
prioПриоритет сортировки (сети идут по prio убыв., затем по названию).
geoГео сети: { код: название } — объединение гео активных публичных офферов сети. Пусто ([]), пока сеть ни разу не проверялась.
authsСписок требуемых данных авторизации (только если offer = true): login/pass — логин и пароль кабинета, user — идентификатор пользователя API, api/key — публичный и секретный ключи.
subscribedПодписан ли текущий пользователь на изменения этой сети.
levelУровень подписки: 0 — не подписан, 1 — только новые офферы, 2 — любые изменения.
{
    "status": "ok",
    "data": {
        "2": {
            "id": 2, "name": "Admitad", "domain": "www.admitad.com",
            "offer": true, "fav": true, "prio": 100,
            "geo": { "ru": "Россия", "de": "Германия" },
            "auths": [ "user", "key" ],
            "subscribed": true, "level": 2
        }
    }
}
Вернуться к оглавлению

07 offers — Список и поиск офферов

GET · POSThttps://cpaw.cat/api/cpaw/offers.json?id={id}

Показывает списки офферов: общий каталог, приватные офферы, подписки. Поиск по URL, названию или похожим офферам.

Параметры

ПолеОписание
filtermy — мои офферы; public — публичные; subs — мои подписки. По умолчанию — мои + публичные.
likeИдентификатор оффера, к которому подбираются похожие (по ключевым словам названия). Если задан, search игнорируется.
searchНазвание оффера (полнотекстовый поиск) или его URL в партнёрской сети.
geoГео оффера: один или несколько двухбуквенных ISO-кодов стран через пробел, тире или запятую.
activeАктивность: 0 — отключённые, 1 — активные.
networkИдентификатор сети.
showОфферов на странице, 10–1000, по умолчанию 500.
offsetПозиция начала выборки (0, 500, 1000, …).
pageСтраница списка, если не указан offset (по умолчанию 1).

Ответ

Поле data содержит объект офферов (ключ — ID оффера), а рядом — блок навигации nav с постраничной разбивкой:

Поле navОписание
totalвсего найдено записей
pageтекущая страница
pagesвсего страниц
showзаписей на страницу
offsetпозиция начала выборки в общем списке

Поля оффера:

ПолеОписание
idИдентификатор оффера.
activeОффер активен.
nameНазвание оффера.
infoАдрес оффера в WatchCat.
nidИдентификатор сети.
networkНазвание сети.
urlАдрес оффера в партнёрской сети.
addМожно ли добавить оффер в приватные.
timeВремя последнего изменения, Unix.
dateДата последнего изменения.
firstПервое появление оффера, Unix.
subПодписан ли пользователь на оффер.
nowМгновенное уведомление по подписке (иначе — в дайджест).
goalЧисло активных целей.
goalsВсего целей.
geoГео оффера: { код: название }.
privatefalse для публичного оффера или объект приватного: period, а также login/pass/user/api/key (расшифрованные, при наличии).
{
    "status": "ok",
    "data": {
        "2861": {
            "id": 2861, "active": true, "name": "Пояс AB Gymnic",
            "info": "https://cpaw.cat/offer/2861", "nid": 6, "network": "M1 Shop",
            "url": "http://m1-shop.ru/myoffers/add/453", "add": true,
            "time": 1571411245, "date": "2019-10-18 15:07:25", "first": 1571411245,
            "sub": true, "now": false, "goal": 3, "goals": 5,
            "geo": { "ru": "Россия", "ua": "Украина" },
            "private": false
        }
    },
    "nav": { "total": 100, "page": 1, "pages": 1, "show": 500, "offset": 0 }
}
Вернуться к оглавлению

08 offer — Информация об оффере

GET · POSThttps://cpaw.cat/api/cpaw/offer.json?id={id}&offer={offer}

Показывает все сведения об одном оффере. Найти оффер можно тремя способами:

  • по offer — идентификатору оффера на стороне WatchCat (единственный способ для приватного оффера);
  • по url — адресу оффера в партнёрской сети (только публичные);
  • по network + uid — идентификатору сети и оффера на её стороне (только публичные).
Переименование параметра: идентификатор оффера читается из параметра offer (в легаси-API это был id; теперь id занят под авторизацию).

Параметры

ПолеОписание
offerИдентификатор оффера в WatchCat.
urlАдрес оффера в партнёрской сети (только публичные офферы).
networkИдентификатор сети (вместе с uid, только публичные).
uidИдентификатор оффера на стороне сети (вместе с network).

Если оффер не найден — ошибка not-found. При успехе data содержит поля оффера (те же, что в offers), а также:

ПолеОписание
goalsВсего целей оффера.
goalactiveЧисло активных целей (в списке offers это поле называется goal).
goalОбъект целей, ключ — ID цели (состав — ниже).
changeМассив изменений оффера (состав — ниже).

Поля цели (goal):

ПолеОписание
idИдентификатор цели.
activeЦель активна.
nameНазвание цели.
typeМодель: CPS/CPL/CPA/CoD/CPC/RS.
codeКод цели в сети.
geoISO-код гео цели.
priceЦена на лендинге.
cashБазовое отчисление или нижняя граница.
upАпсейл / верхняя граница.
crossКросс-сейл.
percentПроцент.
currencyВалюта или false.

Поля изменения (change): id, time, tid, gid, date, type, goal, value, old (см. feed).

{
    "status": "ok",
    "data": {
        "id": 2874, "active": true, "name": "Detoxic - средство от паразитов",
        "info": "https://cpaw.cat/offer/2874", "nid": 6, "network": "M1 Shop",
        "url": "http://m1-shop.ru/myoffers/add/897", "add": true,
        "time": 1571432786, "date": "2019-10-18 21:06:26", "first": 1571429261,
        "sub": true, "now": false,
        "private": false, "goals": 1, "goalactive": 1,
        "geo": { "tj": "Таджикистан" },
        "goal": {
            "11419": {
                "id": 11419, "active": true, "name": "Таджикистан", "type": "CPS",
                "code": "tj", "geo": "tj", "price": 200, "cash": 350,
                "up": 0, "cross": 0, "percent": 0, "currency": "rub"
            }
        },
        "change": [
            { "id": 24201, "time": 1571432786, "tid": 4, "gid": 11419,
              "date": "2019-10-18 21:06:26", "type": "Новая цель",
              "goal": "Таджикистан", "value": false, "old": false }
        ]
    }
}
Вернуться к оглавлению

09 stat — Статистика по сетям

GET · POSThttps://cpaw.cat/api/cpaw/stat.json?id={id}

Агрегаты по каждой публичной сети. Входящих параметров нет. data содержит:

  • nets — массив сетей с полями id, name, url (каталог, отфильтрованный по сети), nomy (сеть не поддерживает добавление своих офферов), domain, offer (офферов), goal (целей), change (изменений);
  • total — суммарные счётчики: networks, offers, goals, changes.
{
    "status": "ok",
    "data": {
        "nets": [
            {
                "id": 2, "name": "Admitad",
                "url": "https://cpaw.cat/offers?n=2", "nomy": true,
                "domain": "www.admitad.com", "offer": 5820, "goal": 14310, "change": 92034
            }
        ],
        "total": { "networks": 48, "offers": 99358, "goals": 229257, "changes": 3293186 }
    }
}
Вернуться к оглавлению

10 daily — Ежедневная статистика

GET · POSThttps://cpaw.cat/api/cpaw/daily.json?id={id}

Глобальные счётчики. Входящих параметров нет. data:

ПолеОписание
netВсего рабочих сетей.
netsИз них публичных.
offerВсего офферов.
offersОфферов добавлено за последние 24 часа.
goalВсего целей.
goalsЦелей добавлено за последние 24 часа.
changeВсего изменений.
changesИзменений за последние 24 часа.
{
    "status": "ok",
    "data": {
        "net": 48, "nets": 47,
        "offer": 99358, "offers": 42,
        "goal": 229257, "goals": 118,
        "change": 3293186, "changes": 1204
    }
}
Вернуться к оглавлению

11 add — Добавить приватный оффер

POSThttps://cpaw.cat/api/cpaw/add.json?id={id}

Создаёт приватный оффер и включает его проверку раз в сутки. Источник оффера задаётся одним из трёх способов.

Параметры

ПолеОписание
offerСуществующий публичный оффер WatchCat (первый способ).
urlАдрес оффера в партнёрской сети (второй способ).
network + uidИдентификатор сети и оффера на её стороне (третий способ).
login, pass, user, api, keyДанные авторизации в сети. Нужный набор полей берётся из списка сетей (поле auths).
Функция выполняет живой запрос к партнёрской сети в момент вызова — ответ может занять заметное время.

При успехе data содержит id добавленного оффера (пригодится для edit / del).

Коды ошибок: not-found — оффер/сеть не найдены; no-private — сеть не поддерживает свои офферы; bad-auth — сеть отклонила данные авторизации; error — ошибка сохранения.

{ "status": "ok", "data": { "id": 1234 } }
Вернуться к оглавлению

12 edit — Настройка приватного оффера

POSThttps://cpaw.cat/api/cpaw/edit.json?id={id}&offer={offer}

Изменяет данные авторизации и частоту проверки. Отправляйте только те поля, которые хотите изменить; обязателен лишь offer.

Параметры

ПолеОписание
offer*Идентификатор оффера на стороне WatchCat (обязательный).
periodПериод проверки в минутах: 1440 — раз в день (оптимально), 720 — дважды в день, 360 — раз в 6 часов, 180 — раз в 3 часа, 120 — раз в 2 часа, 60 — каждый час; для VIP также 30 и 10.
login, pass, user, api, keyДанные авторизации (обновляются только те поля, которые уже заданы у оффера).

При успехе data содержит id и changed — список реально изменённых полей (пустой, если поле уже имело нужное значение).

Коды ошибок: bad-id — не указан offer; access — оффер не ваш; edit — ошибка сохранения.

{ "status": "ok", "data": { "id": 1234, "changed": [ "api" ] } }
Вернуться к оглавлению

13 del — Удалить приватный оффер

POSThttps://cpaw.cat/api/cpaw/del.json?id={id}&offer={offer}

Удаляет ранее добавленный приватный оффер и всю историю его проверки.

Параметры

ПолеОписание
offer*Идентификатор оффера на стороне WatchCat (обязательный).

Коды ошибок: bad-id — не указан offer; access — оффер не ваш.

{ "status": "ok", "data": { "id": 1234 } }
Вернуться к оглавлению

14 sub — Подписаться на оффер

POSThttps://cpaw.cat/api/cpaw/sub.json?id={id}&offer={offer}

Добавляет подписку на публичный оффер. Функция идемпотентна: повторный вызов не создаёт дубль, но позволяет переключить флаг мгновенного уведомления.

Параметры

ПолеОписание
offer*Идентификатор публичного оффера (обязательный).
nowМгновенное уведомление: 1 — сообщать сразу, 0 — включать в дайджест. Если не передан: на новой подписке — 0, на существующей — без изменений.

При успехе data содержит id и актуальное значение флага now.

Коды ошибок: bad-id — не указан offer; access — оффер приватный или сеть недоступна.

{ "status": "ok", "data": { "id": 1234, "now": 1 } }
Вернуться к оглавлению

15 unsub — Отписаться от оффера

POSThttps://cpaw.cat/api/cpaw/unsub.json?id={id}&offer={offer}

Удаляет подписку на публичный оффер.

Параметры

ПолеОписание
offer*Идентификатор оффера (обязательный).

Коды ошибок: bad-id — не указан offer; access — оффер приватный или сеть недоступна.

{ "status": "ok", "data": { "id": 1234 } }
Вернуться к оглавлению

16 nwsub — Подписаться на сеть

POSThttps://cpaw.cat/api/cpaw/nwsub.json?id={id}&network={network}

Добавляет подписку на партнёрскую сеть целиком. Функция идемпотентна: повторный вызов не создаёт дубль, но позволяет сменить уровень подписки.

Параметры

ПолеОписание
network*Идентификатор сети (обязательный).
levelУровень подписки: 1 — только новые офферы, 2 — любые изменения. По умолчанию 1.

При успехе data содержит id сети и актуальный level.

Коды ошибок: bad-id — не указан network; access — сеть недоступна (приватная сеть для не-VIP).

{ "status": "ok", "data": { "id": 2, "level": 2 } }
Вернуться к оглавлению

17 nwunsub — Отписаться от сети

POSThttps://cpaw.cat/api/cpaw/nwunsub.json?id={id}&network={network}

Удаляет подписку на сеть. Разрешена всегда (в том числе если сеть стала приватной).

Параметры

ПолеОписание
network*Идентификатор сети (обязательный).

Коды ошибок: bad-id — не указан network.

{ "status": "ok", "data": { "id": 2 } }
Вернуться к оглавлению