API
Получение списка языков
URL для запроса
| Параметр | Тип данных | Обязательный | Описание |
|---|---|---|---|
| api_key | Строка | Да | Уникальный API ключ для аутентификации запроса. |
| Параметр | Тип данных | Описание |
|---|---|---|
| status | Строка | Поле, указывающее на успешное выполнение запроса ("success") или ошибку ("error"). |
| msg | Строка | Сообщение об ошибке или дополнительная информация о запросе. |
| code | Число | Код ответа, например, 200 для успешного запроса. |
| data | Массив | Массив доступных языков. |
| └ lang_id | Число | Уникальный идентификатор языка. |
| └ name | Строка | Название языка на английском. |
| └ iso_code | Строка | ISO код языка (например, "EN" для английского, "RU" для русского). |
<?php
function api_request($data = [])
{
$ch = curl_init('https://spy.house/api/filters/languages');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE);
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'POST');
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);
curl_setopt($ch, CURLOPT_IPRESOLVE, CURL_IPRESOLVE_V4);
curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query($data));
$body = curl_exec($ch);
$info = curl_getinfo($ch);
curl_close($ch);
if ( ! empty($info['http_code']) && $info['http_code'] == 200) {
return json_decode($body, TRUE);
}
}
$body_request = ['api_key' => 'YOUR_API_KEY'];
$api_request = api_request($body_request);
if ( ! empty($api_request['status'])) {
echo '<pre>';
print_r($api_request);
echo '</pre>';
}
Получение списка стран
URL для запроса
| Параметр | Тип данных | Обязательный | Описание |
|---|---|---|---|
| api_key | Строка | Да | Уникальный API ключ для аутентификации запроса. |
| Параметр | Тип данных | Описание |
|---|---|---|
| status | Строка | Поле, указывающее на успешное выполнение запроса ("success") или ошибку ("error"). |
| msg | Строка | Сообщение об ошибке или дополнительная информация о запросе. |
| code | Число | Код ответа, например, 200 для успешного запроса. |
| data | Массив | Массив доступных стран. |
| └ country_id | Число | Уникальный идентификатор страны. |
| └ name | Строка | Название страны на английском. |
| └ iso_code | Строка | ISO 3166-1 alpha-2 код страны (например, "US" для США). |
| └ iso_code_3 | Строка | ISO 3166-1 alpha-3 код страны (например, "USA" для США). |
<?php
function api_request($data = [])
{
$ch = curl_init('https://spy.house/api/filters/countries');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE);
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'POST');
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);
curl_setopt($ch, CURLOPT_IPRESOLVE, CURL_IPRESOLVE_V4);
curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query($data));
$body = curl_exec($ch);
$info = curl_getinfo($ch);
curl_close($ch);
if ( ! empty($info['http_code']) && $info['http_code'] == 200) {
return json_decode($body, TRUE);
}
}
$body_request = ['api_key' => 'YOUR_API_KEY'];
$api_request = api_request($body_request);
if ( ! empty($api_request['status'])) {
echo '<pre>';
print_r($api_request);
echo '</pre>';
}
Получение списка браузеров
URL для запроса
| Параметр | Тип данных | Обязательный | Описание |
|---|---|---|---|
| api_key | Строка | Да | Уникальный API ключ для аутентификации запроса. |
| Параметр | Тип данных | Описание |
|---|---|---|
| status | Строка | Поле, указывающее на успешное выполнение запроса ("success") или ошибку ("error"). |
| msg | Строка | Сообщение об ошибке или дополнительная информация о запросе. |
| code | Число | Код ответа, например, 200 для успешного запроса. |
| data | Массив | Массив доступных браузеров. |
| └ browser_id | Число | Уникальный идентификатор браузера. |
| └ name | Строка | Название браузера. |
<?php
function api_request($data = [])
{
$ch = curl_init('https://spy.house/api/filters/browsers');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE);
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'POST');
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);
curl_setopt($ch, CURLOPT_IPRESOLVE, CURL_IPRESOLVE_V4);
curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query($data));
$body = curl_exec($ch);
$info = curl_getinfo($ch);
curl_close($ch);
if ( ! empty($info['http_code']) && $info['http_code'] == 200) {
return json_decode($body, TRUE);
}
}
$body_request = ['api_key' => 'YOUR_API_KEY'];
$api_request = api_request($body_request);
if ( ! empty($api_request['status'])) {
echo '<pre>';
print_r($api_request);
echo '</pre>';
}
Получение списка устройств
URL для запроса
| Параметр | Тип данных | Обязательный | Описание |
|---|---|---|---|
| api_key | Строка | Да | Уникальный API ключ для аутентификации запроса. |
| Параметр | Тип данных | Описание |
|---|---|---|
| status | Строка | Поле, указывающее на успешное выполнение запроса ("success") или ошибку ("error"). |
| msg | Строка | Сообщение об ошибке или дополнительная информация о запросе. |
| code | Число | Код ответа, например, 200 для успешного запроса. |
| data | Массив | Массив доступных типов устройств. |
| └ device_id | Число | Уникальный идентификатор типа устройства. |
| └ name | Строка | Отображаемое название типа устройства. |
| └ value | Строка | Значение типа устройства для API запросов. |
<?php
function api_request($data = [])
{
$ch = curl_init('https://spy.house/api/filters/devices');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE);
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'POST');
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);
curl_setopt($ch, CURLOPT_IPRESOLVE, CURL_IPRESOLVE_V4);
curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query($data));
$body = curl_exec($ch);
$info = curl_getinfo($ch);
curl_close($ch);
if ( ! empty($info['http_code']) && $info['http_code'] == 200) {
return json_decode($body, TRUE);
}
}
$body_request = ['api_key' => 'YOUR_API_KEY'];
$api_request = api_request($body_request);
if ( ! empty($api_request['status'])) {
echo '<pre>';
print_r($api_request);
echo '</pre>';
}
Получение списка операционных систем
URL для запроса
| Параметр | Тип данных | Обязательный | Описание |
|---|---|---|---|
| api_key | Строка | Да | Уникальный API ключ для аутентификации запроса. |
| Параметр | Тип данных | Описание |
|---|---|---|
| status | Строка | Поле, указывающее на успешное выполнение запроса ("success") или ошибку ("error"). |
| msg | Строка | Сообщение об ошибке или дополнительная информация о запросе. |
| code | Число | Код ответа, например, 200 для успешного запроса. |
| data | Массив | Массив доступных операционных систем. |
| └ os_id | Число | Уникальный идентификатор операционной системы. |
| └ name | Строка | Отображаемое название операционной системы. |
| └ value | Строка | Значение операционной системы для API запросов. |
<?php
function api_request($data = [])
{
$ch = curl_init('https://spy.house/api/filters/operating_systems');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE);
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'POST');
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);
curl_setopt($ch, CURLOPT_IPRESOLVE, CURL_IPRESOLVE_V4);
curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query($data));
$body = curl_exec($ch);
$info = curl_getinfo($ch);
curl_close($ch);
if ( ! empty($info['http_code']) && $info['http_code'] == 200) {
return json_decode($body, TRUE);
}
}
$body_request = ['api_key' => 'YOUR_API_KEY'];
$api_request = api_request($body_request);
if ( ! empty($api_request['status'])) {
echo '<pre>';
print_r($api_request);
echo '</pre>';
}
Получение списка рекламных сетей
URL для запроса
| Параметр | Тип данных | Обязательный | Описание |
|---|---|---|---|
| api_key | Строка | Да | Уникальный API ключ для аутентификации запроса. |
| Параметр | Тип данных | Описание |
|---|---|---|
| status | Строка | Поле, указывающее на успешное выполнение запроса ("success") или ошибку ("error"). |
| msg | Строка | Сообщение об ошибке или дополнительная информация о запросе. |
| code | Число | Код ответа, например, 200 для успешного запроса. |
| data | Массив | Массив доступных рекламных сетей. |
| └ network_id | Число | Уникальный идентификатор рекламной сети. |
| └ name | Строка | Отображаемое название рекламной сети. |
| └ value | Строка | Значение рекламной сети для API запросов. |
| └ logo | Строка | URL логотипа рекламной сети. |
<?php
function api_request($data = [])
{
$ch = curl_init('https://spy.house/api/filters/advertising_networks');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE);
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'POST');
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);
curl_setopt($ch, CURLOPT_IPRESOLVE, CURL_IPRESOLVE_V4);
curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query($data));
$body = curl_exec($ch);
$info = curl_getinfo($ch);
curl_close($ch);
if ( ! empty($info['http_code']) && $info['http_code'] == 200) {
return json_decode($body, TRUE);
}
}
$body_request = ['api_key' => 'YOUR_API_KEY'];
$api_request = api_request($body_request);
if ( ! empty($api_request['status'])) {
echo '<pre>';
print_r($api_request);
echo '</pre>';
}
Поиск Push креативов
Поиск push-креативов с возможностью фильтрации по различным параметрам.
URL для запроса
| Параметр | Тип данных | Обязательный | Описание |
|---|---|---|---|
| api_key | Строка | Да | Уникальный API ключ для аутентификации запроса. |
| limit | Число | Нет | Максимальное количество возвращаемых записей (1-100). По умолчанию: 20. |
| offset | Число | Нет | Смещение для пагинации. По умолчанию: 0. |
| keyword | Строка | Нет | Ключевое слово для поиска в заголовке и описании креатива. |
| countries | Массив | Нет | Массив ISO-2 кодов стран для фильтрации (например, ["US", "GB"]). |
| country_ids | Массив | Нет | Массив ID стран для фильтрации (из /api/filters/countries). |
| languages | Массив | Нет | Массив ISO кодов языков для фильтрации (например, ["EN", "RU"]). |
| lang_ids | Массив | Нет | Массив ID языков для фильтрации (из /api/filters/languages). |
| advertising_networks | Массив | Нет | Массив названий рекламных сетей для фильтрации. |
| network_ids | Массив | Нет | Массив ID рекламных сетей для фильтрации (из /api/filters/advertising-networks). |
| browsers | Массив | Нет | Массив названий браузеров для фильтрации. |
| browser_ids | Массив | Нет | Массив ID браузеров для фильтрации (из /api/filters/browsers). |
| operating_systems | Массив | Нет | Массив значений операционных систем (например, ["windows", "macos", "android"]). |
| devices | Массив | Нет | Массив типов устройств для фильтрации (например, ["desktop", "mobile"]). |
| date_from | Строка | Нет | Начальная дата для фильтрации в формате YYYY-MM-DD. |
| date_to | Строка | Нет | Конечная дата для фильтрации в формате YYYY-MM-DD. |
| sort_by | Строка | Нет | Поле сортировки: creation, activity, popularity, likes, comments, shares. |
| sort_order | Строка | Нет | Порядок сортировки: asc или desc. По умолчанию: desc. |
| only_adult | Boolean | Нет | Фильтровать только креативы для взрослых. |
| Параметр | Тип данных | Описание |
|---|---|---|
| status | Строка | Поле, указывающее на успешное выполнение запроса ("success") или ошибку ("error"). |
| msg | Строка | Сообщение об ошибке или дополнительная информация о запросе. |
| code | Число | Код ответа, например, 200 для успешного запроса. |
| data | Object | Массив данных потоков, соответствующих запросу. |
| └ format | Строка | Формат креативов в ответе (push, inpage, facebook, tiktok). |
| └ items | Массив | Массив объектов креативов. |
| └ id | Число | Уникальный идентификатор креатива. |
| └ title | Строка | Заголовок креатива. |
| └ description | Строка | Описание креатива. |
| └ category | Строка | Формат/категория креатива (push, inpage, facebook, tiktok). |
| └ country | Object | Объект с информацией о стране (code, name, iso_code_3). |
| └ code | Строка | ISO 3166-1 alpha-2 код страны (например, "US" для США). |
| └ name | Строка | Название страны на английском. |
| └ iso_code_3 | Строка | ISO 3166-1 alpha-3 код страны (например, "USA" для США). |
| └ file_size | Строка | Форматированный общий размер файла. |
| └ icon_url | Строка | URL иконки креатива. |
| └ landing_url | Строка | URL целевой страницы. |
| └ created_at | Строка | Дата создания креатива (формат Y-m-d). |
| └ advertising_networks | Массив | Массив названий рекламных сетей. |
| └ languages | Массив | Массив ISO кодов языков. |
| └ operating_systems | Массив | Массив значений операционных систем. |
| └ browsers | Массив | Массив названий браузеров. |
| └ devices | Массив | Массив типов устройств. |
| └ main_image_url | Строка | URL основного изображения креатива. |
| └ is_adult | Boolean | Содержит ли креатив контент для взрослых. |
| └ is_active | Boolean | Активен ли креатив в данный момент. |
| └ pagination | Object | Информация о пагинации. |
| └ total | Число | Общее количество креативов, соответствующих фильтрам. |
| └ limit | Число | Примененный лимит. |
| └ offset | Число | Примененное смещение. |
| └ has_more | Boolean | Есть ли ещё записи после текущей страницы. |
| └ returned_count | Число | Количество креативов в текущем ответе. |
| └ filters_applied | Object | Объект с примененными фильтрами. |
| └ timestamp | Строка | Метка времени ответа в формате ISO 8601. |
<?php
function searchPushCreatives($params = [])
{
$ch = curl_init('https://spy.house/api/search/push');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE);
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'POST');
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);
curl_setopt($ch, CURLOPT_IPRESOLVE, CURL_IPRESOLVE_V4);
curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query($params));
$body = curl_exec($ch);
$info = curl_getinfo($ch);
curl_close($ch);
if (!empty($info['http_code']) && $info['http_code'] == 200) {
return json_decode($body, TRUE);
}
return null;
}
// Example 1: Basic search with API key
$params = [
'api_key' => 'YOUR_API_KEY',
'limit' => 20,
'offset' => 0,
];
$result = searchPushCreatives($params);
if ($result && $result['status'] === 'success') {
foreach ($result['data']['items'] as $creative) {
echo "ID: " . $creative['id'] . " - " . $creative['title'] . "\n";
}
echo "Total: " . $result['data']['pagination']['total'] . "\n";
}
// Example 2: Search with ISO codes/names filters
$paramsWithFilters = [
'api_key' => 'YOUR_API_KEY',
'limit' => 50,
'offset' => 0,
'keyword' => 'casino',
'countries' => ['US', 'GB', 'DE'], // ISO-2 codes
'languages' => ['EN'], // ISO codes
'browsers' => ['Chrome', 'Firefox'], // Browser names
'sort_by' => 'creation',
'sort_order' => 'desc',
];
$filteredResult = searchPushCreatives($paramsWithFilters);
// Example 3: Search with ID-based filters (recommended)
// Use IDs from /api/filters/* endpoints for better performance
$paramsWithIds = [
'api_key' => 'YOUR_API_KEY',
'limit' => 50,
'offset' => 0,
'keyword' => 'casino',
'country_ids' => [1, 2, 3], // IDs from /api/filters/countries
'lang_ids' => [1], // IDs from /api/filters/languages
'network_ids' => [5, 10], // IDs from /api/filters/advertising-networks
'browser_ids' => [1, 2], // IDs from /api/filters/browsers
'sort_by' => 'creation',
'sort_order' => 'desc',
];
$resultWithIds = searchPushCreatives($paramsWithIds);
// Note: ID-based filters take precedence over name-based filters
// If both country_ids and countries are provided, country_ids will be used
Поиск Inpage креативов
Поиск inpage-креативов с возможностью фильтрации по различным параметрам.
URL для запроса
| Параметр | Тип данных | Обязательный | Описание |
|---|---|---|---|
| api_key | Строка | Да | Уникальный API ключ для аутентификации запроса. |
| limit | Число | Нет | Максимальное количество возвращаемых записей (1-100). По умолчанию: 20. |
| offset | Число | Нет | Смещение для пагинации. По умолчанию: 0. |
| keyword | Строка | Нет | Ключевое слово для поиска в заголовке и описании креатива. |
| countries | Массив | Нет | Массив ISO-2 кодов стран для фильтрации (например, ["US", "GB"]). |
| country_ids | Массив | Нет | Массив ID стран для фильтрации (из /api/filters/countries). |
| languages | Массив | Нет | Массив ISO кодов языков для фильтрации (например, ["EN", "RU"]). |
| lang_ids | Массив | Нет | Массив ID языков для фильтрации (из /api/filters/languages). |
| advertising_networks | Массив | Нет | Массив названий рекламных сетей для фильтрации. |
| network_ids | Массив | Нет | Массив ID рекламных сетей для фильтрации (из /api/filters/advertising-networks). |
| browsers | Массив | Нет | Массив названий браузеров для фильтрации. |
| browser_ids | Массив | Нет | Массив ID браузеров для фильтрации (из /api/filters/browsers). |
| operating_systems | Массив | Нет | Массив значений операционных систем (например, ["windows", "macos", "android"]). |
| devices | Массив | Нет | Массив типов устройств для фильтрации (например, ["desktop", "mobile"]). |
| date_from | Строка | Нет | Начальная дата для фильтрации в формате YYYY-MM-DD. |
| date_to | Строка | Нет | Конечная дата для фильтрации в формате YYYY-MM-DD. |
| sort_by | Строка | Нет | Поле сортировки: creation, activity, popularity, likes, comments, shares. |
| sort_order | Строка | Нет | Порядок сортировки: asc или desc. По умолчанию: desc. |
| only_adult | Boolean | Нет | Фильтровать только креативы для взрослых. |
| Параметр | Тип данных | Описание |
|---|---|---|
| status | Строка | Поле, указывающее на успешное выполнение запроса ("success") или ошибку ("error"). |
| msg | Строка | Сообщение об ошибке или дополнительная информация о запросе. |
| code | Число | Код ответа, например, 200 для успешного запроса. |
| data | Object | Массив данных потоков, соответствующих запросу. |
| └ format | Строка | Формат креативов в ответе (push, inpage, facebook, tiktok). |
| └ items | Массив | Массив объектов креативов. |
| └ id | Число | Уникальный идентификатор креатива. |
| └ title | Строка | Заголовок креатива. |
| └ description | Строка | Описание креатива. |
| └ category | Строка | Формат/категория креатива (push, inpage, facebook, tiktok). |
| └ country | Object | Объект с информацией о стране (code, name, iso_code_3). |
| └ code | Строка | ISO 3166-1 alpha-2 код страны (например, "US" для США). |
| └ name | Строка | Название страны на английском. |
| └ iso_code_3 | Строка | ISO 3166-1 alpha-3 код страны (например, "USA" для США). |
| └ file_size | Строка | Форматированный общий размер файла. |
| └ icon_url | Строка | URL иконки креатива. |
| └ landing_url | Строка | URL целевой страницы. |
| └ created_at | Строка | Дата создания креатива (формат Y-m-d). |
| └ advertising_networks | Массив | Массив названий рекламных сетей. |
| └ languages | Массив | Массив ISO кодов языков. |
| └ operating_systems | Массив | Массив значений операционных систем. |
| └ browsers | Массив | Массив названий браузеров. |
| └ devices | Массив | Массив типов устройств. |
| └ main_image_url | Строка | URL основного изображения креатива. |
| └ is_adult | Boolean | Содержит ли креатив контент для взрослых. |
| └ is_active | Boolean | Активен ли креатив в данный момент. |
| └ pagination | Object | Информация о пагинации. |
| └ total | Число | Общее количество креативов, соответствующих фильтрам. |
| └ limit | Число | Примененный лимит. |
| └ offset | Число | Примененное смещение. |
| └ has_more | Boolean | Есть ли ещё записи после текущей страницы. |
| └ returned_count | Число | Количество креативов в текущем ответе. |
| └ filters_applied | Object | Объект с примененными фильтрами. |
| └ timestamp | Строка | Метка времени ответа в формате ISO 8601. |
<?php
function searchInpageCreatives($params = [])
{
$ch = curl_init('https://spy.house/api/search/inpage');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE);
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'POST');
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);
curl_setopt($ch, CURLOPT_IPRESOLVE, CURL_IPRESOLVE_V4);
curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query($params));
$body = curl_exec($ch);
$info = curl_getinfo($ch);
curl_close($ch);
if (!empty($info['http_code']) && $info['http_code'] == 200) {
return json_decode($body, TRUE);
}
return null;
}
// Example 1: Basic search with API key
$params = [
'api_key' => 'YOUR_API_KEY',
'limit' => 20,
'offset' => 0,
];
$result = searchInpageCreatives($params);
if ($result && $result['status'] === 'success') {
foreach ($result['data']['items'] as $creative) {
echo "ID: " . $creative['id'] . " - " . $creative['title'] . "\n";
}
echo "Total: " . $result['data']['pagination']['total'] . "\n";
}
// Example 2: Search with ISO codes/names filters
$paramsWithFilters = [
'api_key' => 'YOUR_API_KEY',
'limit' => 50,
'offset' => 0,
'keyword' => 'casino',
'countries' => ['US', 'GB', 'DE'], // ISO-2 codes
'languages' => ['EN'], // ISO codes
'browsers' => ['Chrome', 'Firefox'], // Browser names
'sort_by' => 'creation',
'sort_order' => 'desc',
];
$filteredResult = searchInpageCreatives($paramsWithFilters);
// Example 3: Search with ID-based filters (recommended)
// Use IDs from /api/filters/* endpoints for better performance
$paramsWithIds = [
'api_key' => 'YOUR_API_KEY',
'limit' => 50,
'offset' => 0,
'keyword' => 'casino',
'country_ids' => [1, 2, 3], // IDs from /api/filters/countries
'lang_ids' => [1], // IDs from /api/filters/languages
'network_ids' => [5, 10], // IDs from /api/filters/advertising-networks
'browser_ids' => [1, 2], // IDs from /api/filters/browsers
'sort_by' => 'creation',
'sort_order' => 'desc',
];
$resultWithIds = searchInpageCreatives($paramsWithIds);
// Note: ID-based filters take precedence over name-based filters
// If both country_ids and countries are provided, country_ids will be used
Поиск Facebook креативов
Поиск Facebook-креативов с возможностью фильтрации по различным параметрам. При малом количестве результатов API может инициировать живой поиск и вернуть scrapingJob для опроса.
Если scrapingJob.needStartPolling равен true, вызовите тот же endpoint с isPolling=true и job_id для получения новых элементов. Если статус recently_completed или rejected, задание не создаётся и опрос не следует начинать.
Живой поиск запускается только когда в массиве countries указана ровно одна страна.
Живой поиск запускается только при указании непустого ключевого слова.
URL для запроса
| Параметр | Тип данных | Обязательный | Описание |
|---|---|---|---|
| api_key | Строка | Да | Уникальный API ключ для аутентификации запроса. |
| limit | Число | Нет | Максимальное количество возвращаемых записей (1-100). По умолчанию: 20. |
| offset | Число | Нет | Смещение для пагинации. По умолчанию: 0. |
| keyword | Строка | Нет | Ключевое слово для поиска в заголовке и описании креатива. |
| countries | Массив | Нет | Массив ISO-2 кодов стран для фильтрации (например, ["US", "GB"]). |
| country_ids | Массив | Нет | Массив ID стран для фильтрации (из /api/filters/countries). |
| languages | Массив | Нет | Массив ISO кодов языков для фильтрации (например, ["EN", "RU"]). |
| lang_ids | Массив | Нет | Массив ID языков для фильтрации (из /api/filters/languages). |
| date_from | Строка | Нет | Начальная дата для фильтрации в формате YYYY-MM-DD. |
| date_to | Строка | Нет | Конечная дата для фильтрации в формате YYYY-MM-DD. |
| sort_by | Строка | Нет | Поле сортировки: creation, activity, popularity, likes, comments, shares. |
| sort_order | Строка | Нет | Порядок сортировки: asc или desc. По умолчанию: desc. |
| status | Строка | Нет | Фильтр статуса объявления: ALL, ACTIVE, INACTIVE. |
| media_type | Строка | Нет | Фильтр типа медиа: ALL, IMAGE, VIDEO. |
| search_type | Строка | Нет | Тип поиска: keyword_unordered, keyword_exact_phrase. |
| isPolling | Boolean | Нет | Включить опрос для обновлений живого поиска. Используется вместе с job_id. |
| lastId | Число | Нет | ID последнего полученного креатива для инкрементального опроса (необязательно). |
| perPage | Число | Нет | Ожидаемый размер страницы для определения малого количества результатов (12-96). |
| job_id | Строка | Нет | ID задания живого поиска из scrapingJob. Обязателен при isPolling=true. |
| Параметр | Тип данных | Описание |
|---|---|---|
| status | Строка | Поле, указывающее на успешное выполнение запроса ("success") или ошибку ("error"). |
| msg | Строка | Сообщение об ошибке или дополнительная информация о запросе. |
| code | Число | Код ответа, например, 200 для успешного запроса. |
| data | Object | Массив данных потоков, соответствующих запросу. |
| └ format | Строка | Формат креативов в ответе (push, inpage, facebook, tiktok). |
| └ items | Массив | Массив объектов креативов. |
| └ id | Число | Уникальный идентификатор креатива. |
| └ title | Строка | Заголовок креатива. |
| └ description | Строка | Описание креатива. |
| └ category | Строка | Формат/категория креатива (push, inpage, facebook, tiktok). |
| └ country | Object | Объект с информацией о стране (code, name, iso_code_3). |
| └ code | Строка | ISO 3166-1 alpha-2 код страны (например, "US" для США). |
| └ name | Строка | Название страны на английском. |
| └ iso_code_3 | Строка | ISO 3166-1 alpha-3 код страны (например, "USA" для США). |
| └ file_size | Строка | Форматированный общий размер файла. |
| └ icon_url | Строка | URL иконки креатива. |
| └ landing_url | Строка | URL целевой страницы. |
| └ created_at | Строка | Дата создания креатива (формат Y-m-d). |
| └ advertising_networks | Массив | Массив названий рекламных сетей. |
| └ languages | Массив | Массив ISO кодов языков. |
| └ operating_systems | Массив | Массив значений операционных систем. |
| └ browsers | Массив | Массив названий браузеров. |
| └ devices | Массив | Массив типов устройств. |
| └ main_image_url | Строка | URL основного изображения креатива. |
| └ has_video | Boolean | Содержит ли креатив видео. |
| └ video_url | Строка | URL видео (если has_video равен true). |
| └ video_duration | Число | Длительность видео в секундах (если применимо). |
| └ social_likes | Число | Количество лайков (для социальных креативов). |
| └ social_comments | Число | Количество комментариев (для социальных креативов). |
| └ social_shares | Число | Количество репостов (для социальных креативов). |
| └ is_adult | Boolean | Содержит ли креатив контент для взрослых. |
| └ is_active | Boolean | Активен ли креатив в данный момент. |
| └ pagination | Object | Информация о пагинации. |
| └ total | Число | Общее количество креативов, соответствующих фильтрам. |
| └ limit | Число | Примененный лимит. |
| └ offset | Число | Примененное смещение. |
| └ has_more | Boolean | Есть ли ещё записи после текущей страницы. |
| └ returned_count | Число | Количество креативов в текущем ответе. |
| └ filters_applied | Object | Объект с примененными фильтрами. |
| └ scrapingJob | Object | Объект задания живого поиска (присутствует, когда живой поиск запущен или активен). |
| └ type | Строка | Идентификатор типа живого поиска (например, facebook_search). |
| └ status | Строка | Статус задания: dispatched, running, post_processing, completed, failed, error, recently_completed, rejected. |
| └ needStartPolling | Boolean | Должен ли клиент начать опрос для обновлений. |
| └ needStopPolling | Boolean | Должен ли клиент прекратить опрос. |
| └ job_id | Строка | Идентификатор задания для опроса (отсутствует при статусе recently_completed или rejected). |
| └ polling_interval_seconds | Число | Рекомендуемый интервал опроса в секундах. |
| └ estimatedDuration | Число | Ожидаемая продолжительность в секундах (0 при completed или recently_completed). |
| └ message | Строка | Дополнительное сообщение о статусе от сервера или парсера. |
| └ retry_after_seconds | Число | Время ожидания перед повторной попыткой при recently_completed/rejected (если указано). |
| └ error | Строка | Детали ошибки (присутствует при статусе failed или error). |
| └ timestamp | Строка | Метка времени ответа в формате ISO 8601. |
<?php
function searchFacebookCreatives($params = [])
{
$ch = curl_init('https://spy.house/api/search/facebook');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE);
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'POST');
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);
curl_setopt($ch, CURLOPT_IPRESOLVE, CURL_IPRESOLVE_V4);
curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query($params));
$body = curl_exec($ch);
$info = curl_getinfo($ch);
curl_close($ch);
if (!empty($info['http_code']) && $info['http_code'] == 200) {
return json_decode($body, TRUE);
}
return null;
}
// Example 1: Basic search with API key
$params = [
'api_key' => 'YOUR_API_KEY',
'limit' => 20,
'offset' => 0,
'keyword' => 'casino',
'countries' => ['US'],
];
// Example 2: Social filters (status/media_type/search_type)
$paramsWithSocialFilters = [
'api_key' => 'YOUR_API_KEY',
'limit' => 20,
'offset' => 0,
'keyword' => 'casino',
'countries' => ['US'],
'status' => 'ACTIVE',
'media_type' => 'VIDEO',
'search_type' => 'keyword_unordered',
];
$result = searchFacebookCreatives($paramsWithSocialFilters);
// Example 3: Live search polling (when scrapingJob.needStartPolling is true)
$initial = searchFacebookCreatives([
'api_key' => 'YOUR_API_KEY',
'limit' => 10,
'offset' => 0,
'keyword' => 'casino',
'countries' => ['US'],
'status' => 'ACTIVE',
]);
if ($initial && !empty($initial['data']['scrapingJob'])) {
$scrapingJob = $initial['data']['scrapingJob'];
if (!empty($scrapingJob['needStartPolling']) && !empty($scrapingJob['job_id'])) {
$pollingResult = searchFacebookCreatives([
'api_key' => 'YOUR_API_KEY',
'isPolling' => true,
'job_id' => $scrapingJob['job_id'],
'limit' => 10,
'offset' => 0,
]);
}
}
// Note: If scrapingJob.status is "recently_completed" or "rejected",
// the job will not be created and polling should not be started.
Поиск TikTok креативов
Поиск TikTok-креативов с возможностью фильтрации по различным параметрам. При малом количестве результатов API может инициировать живой поиск и вернуть scrapingJob для опроса.
Если scrapingJob.needStartPolling равен true, вызовите тот же endpoint с isPolling=true и job_id для получения новых элементов. Если статус recently_completed или rejected, задание не создаётся и опрос не следует начинать.
Живой поиск запускается только когда в массиве countries указана ровно одна страна.
Живой поиск запускается только при указании непустого ключевого слова.
URL для запроса
| Параметр | Тип данных | Обязательный | Описание |
|---|---|---|---|
| api_key | Строка | Да | Уникальный API ключ для аутентификации запроса. |
| limit | Число | Нет | Максимальное количество возвращаемых записей (1-100). По умолчанию: 20. |
| offset | Число | Нет | Смещение для пагинации. По умолчанию: 0. |
| keyword | Строка | Нет | Ключевое слово для поиска в заголовке и описании креатива. |
| countries | Массив | Нет | Массив ISO-2 кодов стран для фильтрации (например, ["US", "GB"]). |
| country_ids | Массив | Нет | Массив ID стран для фильтрации (из /api/filters/countries). |
| languages | Массив | Нет | Массив ISO кодов языков для фильтрации (например, ["EN", "RU"]). |
| lang_ids | Массив | Нет | Массив ID языков для фильтрации (из /api/filters/languages). |
| date_from | Строка | Нет | Начальная дата для фильтрации в формате YYYY-MM-DD. |
| date_to | Строка | Нет | Конечная дата для фильтрации в формате YYYY-MM-DD. |
| sort_by | Строка | Нет | Поле сортировки: creation, activity, popularity, likes, comments, shares. |
| sort_order | Строка | Нет | Порядок сортировки: asc или desc. По умолчанию: desc. |
| video_duration | Строка | Нет | Фильтр длительности видео TikTok: ALL, SHORT, MEDIUM, LONG. |
| isPolling | Boolean | Нет | Включить опрос для обновлений живого поиска. Используется вместе с job_id. |
| lastId | Число | Нет | ID последнего полученного креатива для инкрементального опроса (необязательно). |
| perPage | Число | Нет | Ожидаемый размер страницы для определения малого количества результатов (12-96). |
| job_id | Строка | Нет | ID задания живого поиска из scrapingJob. Обязателен при isPolling=true. |
| Параметр | Тип данных | Описание |
|---|---|---|
| status | Строка | Поле, указывающее на успешное выполнение запроса ("success") или ошибку ("error"). |
| msg | Строка | Сообщение об ошибке или дополнительная информация о запросе. |
| code | Число | Код ответа, например, 200 для успешного запроса. |
| data | Object | Массив данных потоков, соответствующих запросу. |
| └ format | Строка | Формат креативов в ответе (push, inpage, facebook, tiktok). |
| └ items | Массив | Массив объектов креативов. |
| └ id | Число | Уникальный идентификатор креатива. |
| └ title | Строка | Заголовок креатива. |
| └ description | Строка | Описание креатива. |
| └ category | Строка | Формат/категория креатива (push, inpage, facebook, tiktok). |
| └ country | Object | Объект с информацией о стране (code, name, iso_code_3). |
| └ code | Строка | ISO 3166-1 alpha-2 код страны (например, "US" для США). |
| └ name | Строка | Название страны на английском. |
| └ iso_code_3 | Строка | ISO 3166-1 alpha-3 код страны (например, "USA" для США). |
| └ file_size | Строка | Форматированный общий размер файла. |
| └ icon_url | Строка | URL иконки креатива. |
| └ landing_url | Строка | URL целевой страницы. |
| └ created_at | Строка | Дата создания креатива (формат Y-m-d). |
| └ advertising_networks | Массив | Массив названий рекламных сетей. |
| └ languages | Массив | Массив ISO кодов языков. |
| └ operating_systems | Массив | Массив значений операционных систем. |
| └ browsers | Массив | Массив названий браузеров. |
| └ devices | Массив | Массив типов устройств. |
| └ main_image_url | Строка | URL основного изображения креатива. |
| └ has_video | Boolean | Содержит ли креатив видео. |
| └ video_url | Строка | URL видео (если has_video равен true). |
| └ video_duration | Число | Длительность видео в секундах (если применимо). |
| └ social_likes | Число | Количество лайков (для социальных креативов). |
| └ social_comments | Число | Количество комментариев (для социальных креативов). |
| └ social_shares | Число | Количество репостов (для социальных креативов). |
| └ is_adult | Boolean | Содержит ли креатив контент для взрослых. |
| └ is_active | Boolean | Активен ли креатив в данный момент. |
| └ pagination | Object | Информация о пагинации. |
| └ total | Число | Общее количество креативов, соответствующих фильтрам. |
| └ limit | Число | Примененный лимит. |
| └ offset | Число | Примененное смещение. |
| └ has_more | Boolean | Есть ли ещё записи после текущей страницы. |
| └ returned_count | Число | Количество креативов в текущем ответе. |
| └ filters_applied | Object | Объект с примененными фильтрами. |
| └ scrapingJob | Object | Объект задания живого поиска (присутствует, когда живой поиск запущен или активен). |
| └ type | Строка | Идентификатор типа живого поиска (например, facebook_search). |
| └ status | Строка | Статус задания: dispatched, running, post_processing, completed, failed, error, recently_completed, rejected. |
| └ needStartPolling | Boolean | Должен ли клиент начать опрос для обновлений. |
| └ needStopPolling | Boolean | Должен ли клиент прекратить опрос. |
| └ job_id | Строка | Идентификатор задания для опроса (отсутствует при статусе recently_completed или rejected). |
| └ polling_interval_seconds | Число | Рекомендуемый интервал опроса в секундах. |
| └ estimatedDuration | Число | Ожидаемая продолжительность в секундах (0 при completed или recently_completed). |
| └ message | Строка | Дополнительное сообщение о статусе от сервера или парсера. |
| └ retry_after_seconds | Число | Время ожидания перед повторной попыткой при recently_completed/rejected (если указано). |
| └ error | Строка | Детали ошибки (присутствует при статусе failed или error). |
| └ timestamp | Строка | Метка времени ответа в формате ISO 8601. |
<?php
function searchTikTokCreatives($params = [])
{
$ch = curl_init('https://spy.house/api/search/tiktok');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE);
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'POST');
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);
curl_setopt($ch, CURLOPT_IPRESOLVE, CURL_IPRESOLVE_V4);
curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query($params));
$body = curl_exec($ch);
$info = curl_getinfo($ch);
curl_close($ch);
if (!empty($info['http_code']) && $info['http_code'] == 200) {
return json_decode($body, TRUE);
}
return null;
}
// Example 1: Basic search with API key
$params = [
'api_key' => 'YOUR_API_KEY',
'limit' => 20,
'offset' => 0,
'keyword' => 'casino',
'countries' => ['US'],
];
// Example 2: TikTok filter (video_duration)
$paramsWithVideoDuration = [
'api_key' => 'YOUR_API_KEY',
'limit' => 20,
'offset' => 0,
'keyword' => 'casino',
'countries' => ['US'],
'video_duration' => 'SHORT',
];
$result = searchTikTokCreatives($paramsWithVideoDuration);
// Example 3: Live search polling (when scrapingJob.needStartPolling is true)
$initial = searchTikTokCreatives([
'api_key' => 'YOUR_API_KEY',
'limit' => 10,
'offset' => 0,
'keyword' => 'casino',
'countries' => ['US'],
]);
if ($initial && !empty($initial['data']['scrapingJob'])) {
$scrapingJob = $initial['data']['scrapingJob'];
if (!empty($scrapingJob['needStartPolling']) && !empty($scrapingJob['job_id'])) {
$pollingResult = searchTikTokCreatives([
'api_key' => 'YOUR_API_KEY',
'isPolling' => true,
'job_id' => $scrapingJob['job_id'],
'limit' => 10,
'offset' => 0,
]);
}
}
// Note: If scrapingJob.status is "recently_completed" or "rejected",
// the job will not be created and polling should not be started.
Перевод средств
URL для запроса
| Параметр | Тип данных | Обязательный | Описание |
|---|---|---|---|
| api_key | Строка | Да | Уникальный API ключ для аутентификации запроса. |
| amount | Число | Да | Сумма перевода (минимум 10 USD). |
| Строка | Да | Email получателя перевода. Должен быть действительным. |
| Параметр | Тип данных | Описание |
|---|---|---|
| status | Строка | Поле, указывающее на успешное выполнение запроса ("success") или ошибку ("error"). |
| msg | Строка | Сообщение об ошибке или дополнительная информация о запросе. |
| code | Число | Код ответа, например, 200 для успешного запроса. |
| transaction_number | Строка | Уникальный номер транзакции, связанный с переводом. |
<?php
function api_request($data = [])
{
$ch = curl_init('https://spy.house/api/accounts/transfer_funds');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE);
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'POST');
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);
curl_setopt($ch, CURLOPT_IPRESOLVE, CURL_IPRESOLVE_V4);
curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query($data));
$body = curl_exec($ch);
$info = curl_getinfo($ch);
curl_close($ch);
if ( ! empty($info['http_code']) && $info['http_code'] == 200) {
return json_decode($body, TRUE);
}
}
$body_request = [
'api_key' => 'YOUR_API_KEY',
'amount' => 100,
'email' => '[email protected]'
];
$api_request = api_request($body_request);
if ( ! empty($api_request['status'])) {
echo '<pre>';
print_r($api_request);
echo '</pre>';
}
Получение баланса аккаунта
URL для запроса
| Параметр | Тип данных | Обязательный | Описание |
|---|---|---|---|
| api_key | Строка | Да | Уникальный API ключ для аутентификации запроса. |
| Параметр | Тип данных | Описание |
|---|---|---|
| status | Строка | Поле, указывающее на успешное выполнение запроса ("success") или ошибку ("error"). |
| msg | Строка | Сообщение об ошибке или дополнительная информация о запросе. |
| code | Число | Код ответа, например, 200 для успешного запроса. |
| balance | Число | Текущий баланс аккаунта пользователя. |
<?php
function api_request($data = [])
{
$ch = curl_init('https://spy.house/api/accounts/balance');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE);
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'POST');
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);
curl_setopt($ch, CURLOPT_IPRESOLVE, CURL_IPRESOLVE_V4);
curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query($data));
$body = curl_exec($ch);
$info = curl_getinfo($ch);
curl_close($ch);
if ( ! empty($info['http_code']) && $info['http_code'] == 200) {
return json_decode($body, TRUE);
}
}
$body_request = [
'api_key' => 'YOUR_API_KEY'
];
$api_request = api_request($body_request);
if ( ! empty($api_request['status'])) {
echo '<pre>';
print_r($api_request);
echo '</pre>';
}