Поиск креативов

GET /creatives — поиск по фильтрам, курсорная пагинация, дельта-фид.

GET /public/v1/creatives

Список креативов по фильтрам с курсорной пагинацией. Списывает api_limit по числу отданных объектов. Гемблинг скрыт по умолчанию — кроме явного vertical=gambling, store или app_id.

curl -G https://app.mtwspy.com/public/v1/creatives \
  -H "Authorization: Bearer mtw_live_ваш_ключ" \
  -d geo=PL,DE -d vertical=nutra -d since=2026-07-20 -d sort=reach -d limit=50

Список — это дискавери: domain, метрики, гео. Ссылка на лендинг оффера и файлы лендинга отдаются только на карточке.

Параметры

Списки — через запятую; где отмечено, работает | как ИЛИ (до 50 значений, категорий — 30).

Фильтры

ПараметрЗначения
geoISO-2 (PL,DE…) + регионы EUROPE,LATAM,NORTH_AMERICA,ASIA,AFRICA,OCEANIA
verticalall, nutra, crypto, gambling, ecom
categoryслаги тематик (см. ниже)
formatvideo, image
genderall, male, female
platformплощадки (facebook,instagram…)
ctaтип кнопки (SEE_DETAILS,LEARN_MORE…)
storeмаркетплейс
languageкоды языков
offer domain qоффер / домен / полнотекст (| = ИЛИ)
url fanpage app_id ipпо footer-ссылке / странице / приложению / IP
min_reach…max_reachохват (аналогично _likes, _views, _age)
published_from published_toдиапазон публикации, YYYY-MM-DD / unix
sinceдельта-фид по дате добавления в базу
has_landing1 / 0 — только с лендингом / без

Управление выдачей

ПараметрЗначения
sortadded (деф.), published, reach, reactions
limit1–200 (деф. 50)
cursorтокен следующей страницы (meta.next_cursor)

Слаги категорий

alcoholism, infertility, varicose, hair_loss, gastritis, hemorrhoids, hypertension, fungus, diabetes, vision, teeth, smoking, lungs, urination, rejuvenation, parasites, liver, digestion, potency, weight_loss, prostatitis, psoriasis, hearing, joints, breast_enlargement, penis_enlargement, cystitis.

Ответ

{
  "data": [
    {
      "id": 2255582,
      "uuid": "4499ba18-431e-45a6-bf60-c0a0d2e1ac77",
      "vertical": "nutra",
      "category": "hearing",
      "offer": "Otinax Max",
      "geo": "PL",
      "format": "video",
      "media": { "type": "video", "preview": "https://.../vpreview/....jpg",
                 "items": [{ "url": "https://.../creative/....mp4", "type": "video", "index": 1 }] },
      "text": null,
      "cta": "SEE_DETAILS",
      "domain": "ad-domain.com",
      "has_landing": true,
      "app_id": null,
      "platforms": "facebook, instagram, audience_network, messenger",
      "page": { "id": "100094758680183", "name": "Concrete Canvas" },
      "ad_library_id": "120249694299460433",
      "metrics": { "reach": 1601, "views": 0, "likes": 0, "shares": 0, "comments": 0, "spend_usd_est": 31.72 },
      "targeting": { "gender": "all", "age_min": 25, "age_max": 65 },
      "is_active": false,
      "published_at": "2026-07-21T10:00:00+03:00",
      "stopped_at": "2026-07-24T07:00:00+03:00",
      "last_seen_at": null,
      "added_at": "2026-07-22T09:14:00+03:00"
    }
  ],
  "meta": {
    "delivered": 50,
    "has_more": true,
    "next_cursor": "eyJzIjoiYWRkZWRhdCIsInYiOjE3ODQ4NzAxMDMsImkiOjIyNTU1ODJ9",
    "sort": "added",
    "api_limit": { "period": "2026-07", "limit": 50000, "used": 12390, "remaining": 37610, "plan": "team_api" }
  }
}

Пагинация курсором

Прыгать на произвольную страницу нельзя — только последовательно. Передавайте meta.next_cursor в параметр cursor, пока has_more не станет false:

const BASE = 'https://app.mtwspy.com/public/v1';
const headers = { Authorization: 'Bearer mtw_live_ваш_ключ' };

async function* all(params) {
  let cursor = null;
  do {
    const qs = new URLSearchParams({ ...params, limit: '100', ...(cursor ? { cursor } : {}) });
    const { data, meta } = await (await fetch(`${BASE}/creatives?${qs}`, { headers })).json();
    yield* data;
    cursor = meta.has_more ? meta.next_cursor : null;
  } while (cursor);
}

Курсор привязан к sort. Сменили сортировку — начинайте с запроса без cursor (иначе 422 invalid_parameter).

Дельта-фид (since)

since фильтрует по дате добавления в базу (added_at) — забирайте только то, что появилось с прошлой проверки. Храните last_checked, при следующем прогоне передавайте его в since, затем сдвигайте на текущий момент.

curl -G https://app.mtwspy.com/public/v1/creatives \
  -H "Authorization: Bearer mtw_live_ваш_ключ" \
  -d since=2026-07-27 -d vertical=nutra -d geo=PL -d limit=100

On this page