API
Obtener lista de idiomas
URL de solicitud
| Parámetro | Tipo de datos | Requerido | Descripción |
|---|---|---|---|
| api_key | Cadena | Sí | Clave API única para autenticación de solicitudes. |
| Parámetro | Tipo de datos | Descripción |
|---|---|---|
| status | Cadena | Campo que indica ejecución exitosa ("success") o error ("error"). |
| msg | Cadena | Mensaje de error o información adicional de la solicitud. |
| code | Número | Código de respuesta, ej., 200 para solicitud exitosa. |
| data | Array | Array de idiomas disponibles. |
| └ lang_id | Número | Identificador único del idioma. |
| └ name | Cadena | Nombre del idioma en inglés. |
| └ iso_code | Cadena | Código ISO del idioma (ej., "EN" para inglés, "ES" para español). |
<?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>';
}
Obtener lista de países
URL de solicitud
| Parámetro | Tipo de datos | Requerido | Descripción |
|---|---|---|---|
| api_key | Cadena | Sí | Clave API única para autenticación de solicitudes. |
| Parámetro | Tipo de datos | Descripción |
|---|---|---|
| status | Cadena | Campo que indica ejecución exitosa ("success") o error ("error"). |
| msg | Cadena | Mensaje de error o información adicional de la solicitud. |
| code | Número | Código de respuesta, ej., 200 para solicitud exitosa. |
| data | Array | Array de países disponibles. |
| └ country_id | Número | Identificador único del país. |
| └ name | Cadena | Nombre del país en inglés. |
| └ iso_code | Cadena | Código ISO 3166-1 alpha-2 del país (ej., "ES" para España). |
| └ iso_code_3 | Cadena | Código ISO 3166-1 alpha-3 del país (ej., "ESP" para España). |
<?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>';
}
Obtener lista de navegadores
URL de solicitud
| Parámetro | Tipo de datos | Requerido | Descripción |
|---|---|---|---|
| api_key | Cadena | Sí | Clave API única para autenticación de solicitudes. |
| Parámetro | Tipo de datos | Descripción |
|---|---|---|
| status | Cadena | Campo que indica ejecución exitosa ("success") o error ("error"). |
| msg | Cadena | Mensaje de error o información adicional de la solicitud. |
| code | Número | Código de respuesta, ej., 200 para solicitud exitosa. |
| data | Array | Array de navegadores disponibles. |
| └ browser_id | Número | Identificador único del navegador. |
| └ name | Cadena | Nombre del navegador. |
<?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>';
}
Obtener lista de dispositivos
URL de solicitud
| Parámetro | Tipo de datos | Requerido | Descripción |
|---|---|---|---|
| api_key | Cadena | Sí | Clave API única para autenticación de solicitudes. |
| Parámetro | Tipo de datos | Descripción |
|---|---|---|
| status | Cadena | Campo que indica ejecución exitosa ("success") o error ("error"). |
| msg | Cadena | Mensaje de error o información adicional de la solicitud. |
| code | Número | Código de respuesta, ej., 200 para solicitud exitosa. |
| data | Array | Array de tipos de dispositivos disponibles. |
| └ device_id | Número | Identificador único del tipo de dispositivo. |
| └ name | Cadena | Nombre del tipo de dispositivo. |
| └ value | Cadena | Valor del tipo de dispositivo para solicitudes 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>';
}
Obtener lista de sistemas operativos
URL de solicitud
| Parámetro | Tipo de datos | Requerido | Descripción |
|---|---|---|---|
| api_key | Cadena | Sí | Clave API única para autenticación de solicitudes. |
| Parámetro | Tipo de datos | Descripción |
|---|---|---|
| status | Cadena | Campo que indica ejecución exitosa ("success") o error ("error"). |
| msg | Cadena | Mensaje de error o información adicional de la solicitud. |
| code | Número | Código de respuesta, ej., 200 para solicitud exitosa. |
| data | Array | Array de sistemas operativos disponibles. |
| └ os_id | Número | Identificador único del sistema operativo. |
| └ name | Cadena | Nombre del sistema operativo. |
| └ value | Cadena | Valor del sistema operativo para solicitudes 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>';
}
Obtener lista de redes publicitarias
URL de solicitud
| Parámetro | Tipo de datos | Requerido | Descripción |
|---|---|---|---|
| api_key | Cadena | Sí | Clave API única para autenticación de solicitudes. |
| Parámetro | Tipo de datos | Descripción |
|---|---|---|
| status | Cadena | Campo que indica ejecución exitosa ("success") o error ("error"). |
| msg | Cadena | Mensaje de error o información adicional de la solicitud. |
| code | Número | Código de respuesta, ej., 200 para solicitud exitosa. |
| data | Array | Array de redes publicitarias disponibles. |
| └ network_id | Número | Identificador único de la red publicitaria. |
| └ name | Cadena | Nombre de la red publicitaria. |
| └ value | Cadena | Valor de la red publicitaria para solicitudes API. |
| └ logo | Cadena | URL del logo de la red publicitaria. |
<?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>';
}
Buscar creativos Push
Búsqueda de creativos push con varios filtros.
URL de solicitud
| Parámetro | Tipo de datos | Requerido | Descripción |
|---|---|---|---|
| api_key | Cadena | Sí | Clave API única para autenticación de solicitudes. |
| limit | Número | No | Número de elementos por página (10-100). Predeterminado: 10. |
| offset | Número | No | Número de elementos a omitir. Usado para paginación. Predeterminado: 0. |
| keyword | Cadena | No | Palabra clave de búsqueda para filtrar creativos por título o descripción. |
| countries | Array | No | Array de códigos ISO-2 de países (ej., ["US", "GB", "DE"]). |
| country_ids | Array | No | Array de IDs de países del endpoint /api/filters/countries. Tiene prioridad sobre countries. |
| languages | Array | No | Array de códigos ISO de idiomas (ej., ["EN", "ES", "DE"]). |
| lang_ids | Array | No | Array de IDs de idiomas del endpoint /api/filters/languages. Tiene prioridad sobre languages. |
| advertising_networks | Array | No | Array de nombres de redes publicitarias. |
| network_ids | Array | No | Array de IDs de redes del endpoint /api/filters/advertising-networks. Tiene prioridad sobre advertising_networks. |
| browsers | Array | No | Array de nombres de navegadores. |
| browser_ids | Array | No | Array de IDs de navegadores del endpoint /api/filters/browsers. Tiene prioridad sobre browsers. |
| operating_systems | Array | No | Array de valores de sistemas operativos (ej., ["windows", "macos", "android"]). |
| devices | Array | No | Array de tipos de dispositivos (ej., ["desktop", "mobile", "tablet"]). |
| date_from | Cadena | No | Fecha de inicio para filtrar (formato: Y-m-d, ej., "2025-01-01"). |
| date_to | Cadena | No | Fecha de fin para filtrar (formato: Y-m-d, ej., "2025-12-31"). |
| sort_by | Cadena | No | Campo de ordenación: creation, activity, popularity. |
| sort_order | Cadena | No | Dirección de ordenación: asc o desc. |
| only_adult | Boolean | No | Filtrar solo contenido para adultos. Booleano (true/false). |
| Parámetro | Tipo de datos | Descripción |
|---|---|---|
| status | Cadena | Campo que indica ejecución exitosa ("success") o error ("error"). |
| msg | Cadena | Mensaje de error o información adicional de la solicitud. |
| code | Número | Código de respuesta, ej., 200 para solicitud exitosa. |
| data | Object | Array de datos de flujos que coinciden con la solicitud. |
| └ format | Cadena | Formato de creativo (push, inpage, facebook, tiktok). |
| └ items | Array | Array de objetos de creativos. |
| └ id | Número | Identificador único del creativo. |
| └ title | Cadena | Texto del título del creativo. |
| └ description | Cadena | Texto de descripción del creativo. |
| └ category | Cadena | Formato/categoría del creativo (push, inpage, facebook, tiktok). |
| └ country | Object | Objeto de información del país (code, name, iso_code_3). |
| └ code | Cadena | Código ISO 3166-1 alpha-2 del país (ej., "ES" para España). |
| └ name | Cadena | Nombre del país en inglés. |
| └ iso_code_3 | Cadena | Código ISO 3166-1 alpha-3 del país (ej., "ESP" para España). |
| └ file_size | Cadena | Tamaño total de archivo formateado. |
| └ icon_url | Cadena | URL de la imagen del icono del creativo. |
| └ landing_url | Cadena | URL de la página de destino. |
| └ created_at | Cadena | Fecha de creación del creativo (formato Y-m-d). |
| └ advertising_networks | Array | Array de nombres de redes publicitarias. |
| └ languages | Array | Array de códigos ISO de idiomas. |
| └ operating_systems | Array | Array de valores de sistemas operativos. |
| └ browsers | Array | Array de nombres de navegadores. |
| └ devices | Array | Array de tipos de dispositivos. |
| └ main_image_url | Cadena | URL de la imagen principal del creativo. |
| └ is_adult | Boolean | Si el creativo contiene contenido para adultos. |
| └ is_active | Boolean | Si el creativo está actualmente activo. |
| └ pagination | Object | Objeto de información de paginación. |
| └ total | Número | Número total de creativos que coinciden con los filtros. |
| └ limit | Número | Número de elementos por página. |
| └ offset | Número | Offset actual. |
| └ has_more | Boolean | Si hay más elementos disponibles. |
| └ returned_count | Número | Número de elementos devueltos en esta respuesta. |
| └ filters_applied | Object | Objeto que contiene los filtros aplicados. |
| └ timestamp | Cadena | Marca de tiempo de respuesta en formato 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
Buscar creativos Inpage
Búsqueda de creativos inpage con varios filtros.
URL de solicitud
| Parámetro | Tipo de datos | Requerido | Descripción |
|---|---|---|---|
| api_key | Cadena | Sí | Clave API única para autenticación de solicitudes. |
| limit | Número | No | Número de elementos por página (10-100). Predeterminado: 10. |
| offset | Número | No | Número de elementos a omitir. Usado para paginación. Predeterminado: 0. |
| keyword | Cadena | No | Palabra clave de búsqueda para filtrar creativos por título o descripción. |
| countries | Array | No | Array de códigos ISO-2 de países (ej., ["US", "GB", "DE"]). |
| country_ids | Array | No | Array de IDs de países del endpoint /api/filters/countries. Tiene prioridad sobre countries. |
| languages | Array | No | Array de códigos ISO de idiomas (ej., ["EN", "ES", "DE"]). |
| lang_ids | Array | No | Array de IDs de idiomas del endpoint /api/filters/languages. Tiene prioridad sobre languages. |
| advertising_networks | Array | No | Array de nombres de redes publicitarias. |
| network_ids | Array | No | Array de IDs de redes del endpoint /api/filters/advertising-networks. Tiene prioridad sobre advertising_networks. |
| browsers | Array | No | Array de nombres de navegadores. |
| browser_ids | Array | No | Array de IDs de navegadores del endpoint /api/filters/browsers. Tiene prioridad sobre browsers. |
| operating_systems | Array | No | Array de valores de sistemas operativos (ej., ["windows", "macos", "android"]). |
| devices | Array | No | Array de tipos de dispositivos (ej., ["desktop", "mobile", "tablet"]). |
| date_from | Cadena | No | Fecha de inicio para filtrar (formato: Y-m-d, ej., "2025-01-01"). |
| date_to | Cadena | No | Fecha de fin para filtrar (formato: Y-m-d, ej., "2025-12-31"). |
| sort_by | Cadena | No | Campo de ordenación: creation, activity, popularity. |
| sort_order | Cadena | No | Dirección de ordenación: asc o desc. |
| only_adult | Boolean | No | Filtrar solo contenido para adultos. Booleano (true/false). |
| Parámetro | Tipo de datos | Descripción |
|---|---|---|
| status | Cadena | Campo que indica ejecución exitosa ("success") o error ("error"). |
| msg | Cadena | Mensaje de error o información adicional de la solicitud. |
| code | Número | Código de respuesta, ej., 200 para solicitud exitosa. |
| data | Object | Array de datos de flujos que coinciden con la solicitud. |
| └ format | Cadena | Formato de creativo (push, inpage, facebook, tiktok). |
| └ items | Array | Array de objetos de creativos. |
| └ id | Número | Identificador único del creativo. |
| └ title | Cadena | Texto del título del creativo. |
| └ description | Cadena | Texto de descripción del creativo. |
| └ category | Cadena | Formato/categoría del creativo (push, inpage, facebook, tiktok). |
| └ country | Object | Objeto de información del país (code, name, iso_code_3). |
| └ code | Cadena | Código ISO 3166-1 alpha-2 del país (ej., "ES" para España). |
| └ name | Cadena | Nombre del país en inglés. |
| └ iso_code_3 | Cadena | Código ISO 3166-1 alpha-3 del país (ej., "ESP" para España). |
| └ file_size | Cadena | Tamaño total de archivo formateado. |
| └ icon_url | Cadena | URL de la imagen del icono del creativo. |
| └ landing_url | Cadena | URL de la página de destino. |
| └ created_at | Cadena | Fecha de creación del creativo (formato Y-m-d). |
| └ advertising_networks | Array | Array de nombres de redes publicitarias. |
| └ languages | Array | Array de códigos ISO de idiomas. |
| └ operating_systems | Array | Array de valores de sistemas operativos. |
| └ browsers | Array | Array de nombres de navegadores. |
| └ devices | Array | Array de tipos de dispositivos. |
| └ main_image_url | Cadena | URL de la imagen principal del creativo. |
| └ is_adult | Boolean | Si el creativo contiene contenido para adultos. |
| └ is_active | Boolean | Si el creativo está actualmente activo. |
| └ pagination | Object | Objeto de información de paginación. |
| └ total | Número | Número total de creativos que coinciden con los filtros. |
| └ limit | Número | Número de elementos por página. |
| └ offset | Número | Offset actual. |
| └ has_more | Boolean | Si hay más elementos disponibles. |
| └ returned_count | Número | Número de elementos devueltos en esta respuesta. |
| └ filters_applied | Object | Objeto que contiene los filtros aplicados. |
| └ timestamp | Cadena | Marca de tiempo de respuesta en formato 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
Buscar creativos Facebook
Búsqueda de creativos de Facebook con varios filtros. Cuando hay pocos resultados, la API puede iniciar una búsqueda en vivo y devolver un scrapingJob para polling.
Si scrapingJob.needStartPolling es true, llame al mismo endpoint con isPolling=true y job_id para recibir nuevos elementos. Si el estado es recently_completed o rejected, no se crea trabajo y no se debe iniciar el polling.
La búsqueda en vivo se inicia solo cuando se especifica exactamente un país en el array countries.
La búsqueda en vivo se inicia solo cuando se proporciona una palabra clave no vacía.
URL de solicitud
| Parámetro | Tipo de datos | Requerido | Descripción |
|---|---|---|---|
| api_key | Cadena | Sí | Clave API única para autenticación de solicitudes. |
| limit | Número | No | Número de elementos por página (10-100). Predeterminado: 10. |
| offset | Número | No | Número de elementos a omitir. Usado para paginación. Predeterminado: 0. |
| keyword | Cadena | No | Palabra clave de búsqueda para filtrar creativos por título o descripción. |
| countries | Array | No | Array de códigos ISO-2 de países (ej., ["US", "GB", "DE"]). |
| country_ids | Array | No | Array de IDs de países del endpoint /api/filters/countries. Tiene prioridad sobre countries. |
| languages | Array | No | Array de códigos ISO de idiomas (ej., ["EN", "ES", "DE"]). |
| lang_ids | Array | No | Array de IDs de idiomas del endpoint /api/filters/languages. Tiene prioridad sobre languages. |
| date_from | Cadena | No | Fecha de inicio para filtrar (formato: Y-m-d, ej., "2025-01-01"). |
| date_to | Cadena | No | Fecha de fin para filtrar (formato: Y-m-d, ej., "2025-12-31"). |
| sort_by | Cadena | No | Campo de ordenación: creation, activity, popularity. |
| sort_order | Cadena | No | Dirección de ordenación: asc o desc. |
| status | Cadena | No | Filtro de estado de anuncio: ALL, ACTIVE, INACTIVE. |
| media_type | Cadena | No | Filtro de tipo de medios: ALL, IMAGE, VIDEO. |
| search_type | Cadena | No | Tipo de búsqueda: keyword_unordered, keyword_exact_phrase. |
| isPolling | Boolean | No | Habilitar polling para actualizaciones de búsqueda en vivo. Usar con job_id. |
| lastId | Número | No | Último ID de creativo recibido para polling incremental (opcional). |
| perPage | Número | No | Tamaño de página esperado para detección de pocos resultados (12-96). |
| job_id | Cadena | No | ID de trabajo de búsqueda en vivo de scrapingJob. Requerido cuando isPolling=true. |
| Parámetro | Tipo de datos | Descripción |
|---|---|---|
| status | Cadena | Campo que indica ejecución exitosa ("success") o error ("error"). |
| msg | Cadena | Mensaje de error o información adicional de la solicitud. |
| code | Número | Código de respuesta, ej., 200 para solicitud exitosa. |
| data | Object | Array de datos de flujos que coinciden con la solicitud. |
| └ format | Cadena | Formato de creativo (push, inpage, facebook, tiktok). |
| └ items | Array | Array de objetos de creativos. |
| └ id | Número | Identificador único del creativo. |
| └ title | Cadena | Texto del título del creativo. |
| └ description | Cadena | Texto de descripción del creativo. |
| └ category | Cadena | Formato/categoría del creativo (push, inpage, facebook, tiktok). |
| └ country | Object | Objeto de información del país (code, name, iso_code_3). |
| └ code | Cadena | Código ISO 3166-1 alpha-2 del país (ej., "ES" para España). |
| └ name | Cadena | Nombre del país en inglés. |
| └ iso_code_3 | Cadena | Código ISO 3166-1 alpha-3 del país (ej., "ESP" para España). |
| └ file_size | Cadena | Tamaño total de archivo formateado. |
| └ icon_url | Cadena | URL de la imagen del icono del creativo. |
| └ landing_url | Cadena | URL de la página de destino. |
| └ created_at | Cadena | Fecha de creación del creativo (formato Y-m-d). |
| └ advertising_networks | Array | Array de nombres de redes publicitarias. |
| └ languages | Array | Array de códigos ISO de idiomas. |
| └ operating_systems | Array | Array de valores de sistemas operativos. |
| └ browsers | Array | Array de nombres de navegadores. |
| └ devices | Array | Array de tipos de dispositivos. |
| └ main_image_url | Cadena | URL de la imagen principal del creativo. |
| └ has_video | Boolean | Si el creativo contiene video. |
| └ video_url | Cadena | URL del video (si has_video es true). |
| └ video_duration | Número | Duración del video en segundos (si aplica). |
| └ social_likes | Número | Número de likes (para anuncios sociales). |
| └ social_comments | Número | Número de comentarios (para anuncios sociales). |
| └ social_shares | Número | Número de compartidos (para anuncios sociales). |
| └ is_adult | Boolean | Si el creativo contiene contenido para adultos. |
| └ is_active | Boolean | Si el creativo está actualmente activo. |
| └ pagination | Object | Objeto de información de paginación. |
| └ total | Número | Número total de creativos que coinciden con los filtros. |
| └ limit | Número | Número de elementos por página. |
| └ offset | Número | Offset actual. |
| └ has_more | Boolean | Si hay más elementos disponibles. |
| └ returned_count | Número | Número de elementos devueltos en esta respuesta. |
| └ filters_applied | Object | Objeto que contiene los filtros aplicados. |
| └ scrapingJob | Object | Objeto de trabajo de búsqueda en vivo (presente cuando la búsqueda en vivo está iniciada o activa). |
| └ type | Cadena | Identificador de tipo de búsqueda en vivo (ej., facebook_search). |
| └ status | Cadena | Estado del trabajo: dispatched, running, post_processing, completed, failed, error, recently_completed, rejected. |
| └ needStartPolling | Boolean | Si el cliente debe comenzar el polling para actualizaciones. |
| └ needStopPolling | Boolean | Si el cliente debe detener el polling. |
| └ job_id | Cadena | Identificador de trabajo para polling (ausente cuando el estado es recently_completed o rejected). |
| └ polling_interval_seconds | Número | Intervalo de polling recomendado en segundos. |
| └ estimatedDuration | Número | Duración estimada en segundos (0 cuando completed o recently_completed). |
| └ message | Cadena | Mensaje de estado adicional del servidor o parser. |
| └ retry_after_seconds | Número | Cuánto esperar antes de reintentar cuando recently_completed/rejected (si se proporciona). |
| └ error | Cadena | Detalles del error (presente cuando el estado es failed o error). |
| └ timestamp | Cadena | Marca de tiempo de respuesta en formato 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.
Buscar creativos TikTok
Búsqueda de creativos de TikTok con varios filtros. Cuando hay pocos resultados, la API puede iniciar una búsqueda en vivo y devolver un scrapingJob para polling.
Si scrapingJob.needStartPolling es true, llame al mismo endpoint con isPolling=true y job_id para recibir nuevos elementos. Si el estado es recently_completed o rejected, no se crea trabajo y no se debe iniciar el polling.
La búsqueda en vivo se inicia solo cuando se especifica exactamente un país en el array countries.
La búsqueda en vivo se inicia solo cuando se proporciona una palabra clave no vacía.
URL de solicitud
| Parámetro | Tipo de datos | Requerido | Descripción |
|---|---|---|---|
| api_key | Cadena | Sí | Clave API única para autenticación de solicitudes. |
| limit | Número | No | Número de elementos por página (10-100). Predeterminado: 10. |
| offset | Número | No | Número de elementos a omitir. Usado para paginación. Predeterminado: 0. |
| keyword | Cadena | No | Palabra clave de búsqueda para filtrar creativos por título o descripción. |
| countries | Array | No | Array de códigos ISO-2 de países (ej., ["US", "GB", "DE"]). |
| country_ids | Array | No | Array de IDs de países del endpoint /api/filters/countries. Tiene prioridad sobre countries. |
| languages | Array | No | Array de códigos ISO de idiomas (ej., ["EN", "ES", "DE"]). |
| lang_ids | Array | No | Array de IDs de idiomas del endpoint /api/filters/languages. Tiene prioridad sobre languages. |
| date_from | Cadena | No | Fecha de inicio para filtrar (formato: Y-m-d, ej., "2025-01-01"). |
| date_to | Cadena | No | Fecha de fin para filtrar (formato: Y-m-d, ej., "2025-12-31"). |
| sort_by | Cadena | No | Campo de ordenación: creation, activity, popularity. |
| sort_order | Cadena | No | Dirección de ordenación: asc o desc. |
| video_duration | Cadena | No | Filtro de duración de video TikTok: ALL, SHORT, MEDIUM, LONG. |
| isPolling | Boolean | No | Habilitar polling para actualizaciones de búsqueda en vivo. Usar con job_id. |
| lastId | Número | No | Último ID de creativo recibido para polling incremental (opcional). |
| perPage | Número | No | Tamaño de página esperado para detección de pocos resultados (12-96). |
| job_id | Cadena | No | ID de trabajo de búsqueda en vivo de scrapingJob. Requerido cuando isPolling=true. |
| Parámetro | Tipo de datos | Descripción |
|---|---|---|
| status | Cadena | Campo que indica ejecución exitosa ("success") o error ("error"). |
| msg | Cadena | Mensaje de error o información adicional de la solicitud. |
| code | Número | Código de respuesta, ej., 200 para solicitud exitosa. |
| data | Object | Array de datos de flujos que coinciden con la solicitud. |
| └ format | Cadena | Formato de creativo (push, inpage, facebook, tiktok). |
| └ items | Array | Array de objetos de creativos. |
| └ id | Número | Identificador único del creativo. |
| └ title | Cadena | Texto del título del creativo. |
| └ description | Cadena | Texto de descripción del creativo. |
| └ category | Cadena | Formato/categoría del creativo (push, inpage, facebook, tiktok). |
| └ country | Object | Objeto de información del país (code, name, iso_code_3). |
| └ code | Cadena | Código ISO 3166-1 alpha-2 del país (ej., "ES" para España). |
| └ name | Cadena | Nombre del país en inglés. |
| └ iso_code_3 | Cadena | Código ISO 3166-1 alpha-3 del país (ej., "ESP" para España). |
| └ file_size | Cadena | Tamaño total de archivo formateado. |
| └ icon_url | Cadena | URL de la imagen del icono del creativo. |
| └ landing_url | Cadena | URL de la página de destino. |
| └ created_at | Cadena | Fecha de creación del creativo (formato Y-m-d). |
| └ advertising_networks | Array | Array de nombres de redes publicitarias. |
| └ languages | Array | Array de códigos ISO de idiomas. |
| └ operating_systems | Array | Array de valores de sistemas operativos. |
| └ browsers | Array | Array de nombres de navegadores. |
| └ devices | Array | Array de tipos de dispositivos. |
| └ main_image_url | Cadena | URL de la imagen principal del creativo. |
| └ has_video | Boolean | Si el creativo contiene video. |
| └ video_url | Cadena | URL del video (si has_video es true). |
| └ video_duration | Número | Duración del video en segundos (si aplica). |
| └ social_likes | Número | Número de likes (para anuncios sociales). |
| └ social_comments | Número | Número de comentarios (para anuncios sociales). |
| └ social_shares | Número | Número de compartidos (para anuncios sociales). |
| └ is_adult | Boolean | Si el creativo contiene contenido para adultos. |
| └ is_active | Boolean | Si el creativo está actualmente activo. |
| └ pagination | Object | Objeto de información de paginación. |
| └ total | Número | Número total de creativos que coinciden con los filtros. |
| └ limit | Número | Número de elementos por página. |
| └ offset | Número | Offset actual. |
| └ has_more | Boolean | Si hay más elementos disponibles. |
| └ returned_count | Número | Número de elementos devueltos en esta respuesta. |
| └ filters_applied | Object | Objeto que contiene los filtros aplicados. |
| └ scrapingJob | Object | Objeto de trabajo de búsqueda en vivo (presente cuando la búsqueda en vivo está iniciada o activa). |
| └ type | Cadena | Identificador de tipo de búsqueda en vivo (ej., facebook_search). |
| └ status | Cadena | Estado del trabajo: dispatched, running, post_processing, completed, failed, error, recently_completed, rejected. |
| └ needStartPolling | Boolean | Si el cliente debe comenzar el polling para actualizaciones. |
| └ needStopPolling | Boolean | Si el cliente debe detener el polling. |
| └ job_id | Cadena | Identificador de trabajo para polling (ausente cuando el estado es recently_completed o rejected). |
| └ polling_interval_seconds | Número | Intervalo de polling recomendado en segundos. |
| └ estimatedDuration | Número | Duración estimada en segundos (0 cuando completed o recently_completed). |
| └ message | Cadena | Mensaje de estado adicional del servidor o parser. |
| └ retry_after_seconds | Número | Cuánto esperar antes de reintentar cuando recently_completed/rejected (si se proporciona). |
| └ error | Cadena | Detalles del error (presente cuando el estado es failed o error). |
| └ timestamp | Cadena | Marca de tiempo de respuesta en formato 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.
Transferir fondos
URL de solicitud
| Parámetro | Tipo de datos | Requerido | Descripción |
|---|---|---|---|
| api_key | Cadena | Sí | Clave API única para autenticación de solicitudes. |
| amount | Número | Sí | Monto de transferencia (mínimo 10 USD). |
| Cadena | Sí | Email del destinatario de la transferencia. Debe ser válido. |
| Parámetro | Tipo de datos | Descripción |
|---|---|---|
| status | Cadena | Campo que indica ejecución exitosa ("success") o error ("error"). |
| msg | Cadena | Mensaje de error o información adicional de la solicitud. |
| code | Número | Código de respuesta, ej., 200 para solicitud exitosa. |
| transaction_number | Cadena | Número de transacción único asociado con la transferencia. |
<?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>';
}
Obtener saldo de cuenta
URL de solicitud
| Parámetro | Tipo de datos | Requerido | Descripción |
|---|---|---|---|
| api_key | Cadena | Sí | Clave API única para autenticación de solicitudes. |
| Parámetro | Tipo de datos | Descripción |
|---|---|---|
| status | Cadena | Campo que indica ejecución exitosa ("success") o error ("error"). |
| msg | Cadena | Mensaje de error o información adicional de la solicitud. |
| code | Número | Código de respuesta, ej., 200 para solicitud exitosa. |
| balance | Número | Saldo actual de la cuenta del usuario. |
<?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>';
}