API
Obter lista de idiomas
URL da requisição
| Parâmetro | Tipo de dados | Obrigatório | Descrição |
|---|---|---|---|
| api_key | String | Sim | Chave API única para autenticação de requisições. |
| Parâmetro | Tipo de dados | Descrição |
|---|---|---|
| status | String | Campo indicando execução bem-sucedida ("success") ou erro ("error"). |
| msg | String | Mensagem de erro ou informações adicionais da requisição. |
| code | Número | Código de resposta, ex., 200 para requisição bem-sucedida. |
| data | Array | Array de idiomas disponíveis. |
| └ lang_id | Número | Identificador único do idioma. |
| └ name | String | Nome do idioma em inglês. |
| └ iso_code | String | Código ISO do idioma (ex., "EN" para inglês, "PT" para português). |
<?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>';
}
Obter lista de países
URL da requisição
| Parâmetro | Tipo de dados | Obrigatório | Descrição |
|---|---|---|---|
| api_key | String | Sim | Chave API única para autenticação de requisições. |
| Parâmetro | Tipo de dados | Descrição |
|---|---|---|
| status | String | Campo indicando execução bem-sucedida ("success") ou erro ("error"). |
| msg | String | Mensagem de erro ou informações adicionais da requisição. |
| code | Número | Código de resposta, ex., 200 para requisição bem-sucedida. |
| data | Array | Array de países disponíveis. |
| └ country_id | Número | Identificador único do país. |
| └ name | String | Nome do país em inglês. |
| └ iso_code | String | Código ISO 3166-1 alpha-2 do país (ex., "BR" para Brasil). |
| └ iso_code_3 | String | Código ISO 3166-1 alpha-3 do país (ex., "BRA" para Brasil). |
<?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>';
}
Obter lista de navegadores
URL da requisição
| Parâmetro | Tipo de dados | Obrigatório | Descrição |
|---|---|---|---|
| api_key | String | Sim | Chave API única para autenticação de requisições. |
| Parâmetro | Tipo de dados | Descrição |
|---|---|---|
| status | String | Campo indicando execução bem-sucedida ("success") ou erro ("error"). |
| msg | String | Mensagem de erro ou informações adicionais da requisição. |
| code | Número | Código de resposta, ex., 200 para requisição bem-sucedida. |
| data | Array | Array de navegadores disponíveis. |
| └ browser_id | Número | Identificador único do navegador. |
| └ name | String | Nome do 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>';
}
Obter lista de dispositivos
URL da requisição
| Parâmetro | Tipo de dados | Obrigatório | Descrição |
|---|---|---|---|
| api_key | String | Sim | Chave API única para autenticação de requisições. |
| Parâmetro | Tipo de dados | Descrição |
|---|---|---|
| status | String | Campo indicando execução bem-sucedida ("success") ou erro ("error"). |
| msg | String | Mensagem de erro ou informações adicionais da requisição. |
| code | Número | Código de resposta, ex., 200 para requisição bem-sucedida. |
| data | Array | Array de tipos de dispositivos disponíveis. |
| └ device_id | Número | Identificador único do tipo de dispositivo. |
| └ name | String | Nome de exibição do tipo de dispositivo. |
| └ value | String | Valor do tipo de dispositivo para requisições 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>';
}
Obter lista de sistemas operacionais
URL da requisição
| Parâmetro | Tipo de dados | Obrigatório | Descrição |
|---|---|---|---|
| api_key | String | Sim | Chave API única para autenticação de requisições. |
| Parâmetro | Tipo de dados | Descrição |
|---|---|---|
| status | String | Campo indicando execução bem-sucedida ("success") ou erro ("error"). |
| msg | String | Mensagem de erro ou informações adicionais da requisição. |
| code | Número | Código de resposta, ex., 200 para requisição bem-sucedida. |
| data | Array | Array de sistemas operacionais disponíveis. |
| └ os_id | Número | Identificador único do sistema operacional. |
| └ name | String | Nome de exibição do sistema operacional. |
| └ value | String | Valor do sistema operacional para requisições 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>';
}
Obter lista de redes de publicidade
URL da requisição
| Parâmetro | Tipo de dados | Obrigatório | Descrição |
|---|---|---|---|
| api_key | String | Sim | Chave API única para autenticação de requisições. |
| Parâmetro | Tipo de dados | Descrição |
|---|---|---|
| status | String | Campo indicando execução bem-sucedida ("success") ou erro ("error"). |
| msg | String | Mensagem de erro ou informações adicionais da requisição. |
| code | Número | Código de resposta, ex., 200 para requisição bem-sucedida. |
| data | Array | Array de redes de publicidade disponíveis. |
| └ network_id | Número | Identificador único da rede de publicidade. |
| └ name | String | Nome de exibição da rede de publicidade. |
| └ value | String | Valor da rede de publicidade para requisições API. |
| └ logo | String | URL do logo da rede de publicidade. |
<?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>';
}
Pesquisar criativos Push
Pesquisa de criativos push com vários filtros.
URL da requisição
| Parâmetro | Tipo de dados | Obrigatório | Descrição |
|---|---|---|---|
| api_key | String | Sim | Chave API única para autenticação de requisições. |
| limit | Número | Não | Número de itens por página (10-100). Padrão: 10. |
| offset | Número | Não | Número de itens a pular. Usado para paginação. Padrão: 0. |
| keyword | String | Não | Palavra-chave de pesquisa para filtrar criativos por título ou descrição. |
| countries | Array | Não | Array de códigos ISO-2 de países (ex., ["US", "GB", "DE"]). |
| country_ids | Array | Não | Array de IDs de países do endpoint /api/filters/countries. Tem prioridade sobre countries. |
| languages | Array | Não | Array de códigos ISO de idiomas (ex., ["EN", "PT", "DE"]). |
| lang_ids | Array | Não | Array de IDs de idiomas do endpoint /api/filters/languages. Tem prioridade sobre languages. |
| advertising_networks | Array | Não | Array de nomes de redes de publicidade. |
| network_ids | Array | Não | Array de IDs de redes do endpoint /api/filters/advertising-networks. Tem prioridade sobre advertising_networks. |
| browsers | Array | Não | Array de nomes de navegadores. |
| browser_ids | Array | Não | Array de IDs de navegadores do endpoint /api/filters/browsers. Tem prioridade sobre browsers. |
| operating_systems | Array | Não | Array de valores de sistemas operacionais (ex., ["windows", "macos", "android"]). |
| devices | Array | Não | Array de tipos de dispositivos (ex., ["desktop", "mobile", "tablet"]). |
| date_from | String | Não | Data inicial para filtragem (formato: Y-m-d, ex., "2025-01-01"). |
| date_to | String | Não | Data final para filtragem (formato: Y-m-d, ex., "2025-12-31"). |
| sort_by | String | Não | Campo de ordenação: creation, activity, popularity. |
| sort_order | String | Não | Direção de ordenação: asc ou desc. |
| only_adult | Boolean | Não | Filtrar apenas conteúdo adulto. Booleano (true/false). |
| Parâmetro | Tipo de dados | Descrição |
|---|---|---|
| status | String | Campo indicando execução bem-sucedida ("success") ou erro ("error"). |
| msg | String | Mensagem de erro ou informações adicionais da requisição. |
| code | Número | Código de resposta, ex., 200 para requisição bem-sucedida. |
| data | Object | Array de dados de fluxos correspondentes à requisição. |
| └ format | String | Formato do criativo (push, inpage, facebook, tiktok). |
| └ items | Array | Array de objetos de criativos. |
| └ id | Número | Identificador único do criativo. |
| └ title | String | Texto do título do criativo. |
| └ description | String | Texto de descrição do criativo. |
| └ category | String | Formato/categoria do criativo (push, inpage, facebook, tiktok). |
| └ country | Object | Objeto de informações do país (code, name, iso_code_3). |
| └ code | String | Código ISO 3166-1 alpha-2 do país (ex., "BR" para Brasil). |
| └ name | String | Nome do país em inglês. |
| └ iso_code_3 | String | Código ISO 3166-1 alpha-3 do país (ex., "BRA" para Brasil). |
| └ file_size | String | Tamanho total do arquivo formatado. |
| └ icon_url | String | URL da imagem do ícone do criativo. |
| └ landing_url | String | URL da página de destino. |
| └ created_at | String | Data de criação do criativo (formato Y-m-d). |
| └ advertising_networks | Array | Array de nomes de redes de publicidade. |
| └ languages | Array | Array de códigos ISO de idiomas. |
| └ operating_systems | Array | Array de valores de sistemas operacionais. |
| └ browsers | Array | Array de nomes de navegadores. |
| └ devices | Array | Array de tipos de dispositivos. |
| └ main_image_url | String | URL da imagem principal do criativo. |
| └ is_adult | Boolean | Se o criativo contém conteúdo adulto. |
| └ is_active | Boolean | Se o criativo está atualmente ativo. |
| └ pagination | Object | Objeto de informações de paginação. |
| └ total | Número | Número total de criativos que correspondem aos filtros. |
| └ limit | Número | Número de itens por página. |
| └ offset | Número | Offset atual. |
| └ has_more | Boolean | Se há mais itens disponíveis. |
| └ returned_count | Número | Número de itens retornados nesta resposta. |
| └ filters_applied | Object | Objeto contendo os filtros aplicados. |
| └ timestamp | String | Timestamp da resposta no 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
Pesquisar criativos Inpage
Pesquisa de criativos inpage com vários filtros.
URL da requisição
| Parâmetro | Tipo de dados | Obrigatório | Descrição |
|---|---|---|---|
| api_key | String | Sim | Chave API única para autenticação de requisições. |
| limit | Número | Não | Número de itens por página (10-100). Padrão: 10. |
| offset | Número | Não | Número de itens a pular. Usado para paginação. Padrão: 0. |
| keyword | String | Não | Palavra-chave de pesquisa para filtrar criativos por título ou descrição. |
| countries | Array | Não | Array de códigos ISO-2 de países (ex., ["US", "GB", "DE"]). |
| country_ids | Array | Não | Array de IDs de países do endpoint /api/filters/countries. Tem prioridade sobre countries. |
| languages | Array | Não | Array de códigos ISO de idiomas (ex., ["EN", "PT", "DE"]). |
| lang_ids | Array | Não | Array de IDs de idiomas do endpoint /api/filters/languages. Tem prioridade sobre languages. |
| advertising_networks | Array | Não | Array de nomes de redes de publicidade. |
| network_ids | Array | Não | Array de IDs de redes do endpoint /api/filters/advertising-networks. Tem prioridade sobre advertising_networks. |
| browsers | Array | Não | Array de nomes de navegadores. |
| browser_ids | Array | Não | Array de IDs de navegadores do endpoint /api/filters/browsers. Tem prioridade sobre browsers. |
| operating_systems | Array | Não | Array de valores de sistemas operacionais (ex., ["windows", "macos", "android"]). |
| devices | Array | Não | Array de tipos de dispositivos (ex., ["desktop", "mobile", "tablet"]). |
| date_from | String | Não | Data inicial para filtragem (formato: Y-m-d, ex., "2025-01-01"). |
| date_to | String | Não | Data final para filtragem (formato: Y-m-d, ex., "2025-12-31"). |
| sort_by | String | Não | Campo de ordenação: creation, activity, popularity. |
| sort_order | String | Não | Direção de ordenação: asc ou desc. |
| only_adult | Boolean | Não | Filtrar apenas conteúdo adulto. Booleano (true/false). |
| Parâmetro | Tipo de dados | Descrição |
|---|---|---|
| status | String | Campo indicando execução bem-sucedida ("success") ou erro ("error"). |
| msg | String | Mensagem de erro ou informações adicionais da requisição. |
| code | Número | Código de resposta, ex., 200 para requisição bem-sucedida. |
| data | Object | Array de dados de fluxos correspondentes à requisição. |
| └ format | String | Formato do criativo (push, inpage, facebook, tiktok). |
| └ items | Array | Array de objetos de criativos. |
| └ id | Número | Identificador único do criativo. |
| └ title | String | Texto do título do criativo. |
| └ description | String | Texto de descrição do criativo. |
| └ category | String | Formato/categoria do criativo (push, inpage, facebook, tiktok). |
| └ country | Object | Objeto de informações do país (code, name, iso_code_3). |
| └ code | String | Código ISO 3166-1 alpha-2 do país (ex., "BR" para Brasil). |
| └ name | String | Nome do país em inglês. |
| └ iso_code_3 | String | Código ISO 3166-1 alpha-3 do país (ex., "BRA" para Brasil). |
| └ file_size | String | Tamanho total do arquivo formatado. |
| └ icon_url | String | URL da imagem do ícone do criativo. |
| └ landing_url | String | URL da página de destino. |
| └ created_at | String | Data de criação do criativo (formato Y-m-d). |
| └ advertising_networks | Array | Array de nomes de redes de publicidade. |
| └ languages | Array | Array de códigos ISO de idiomas. |
| └ operating_systems | Array | Array de valores de sistemas operacionais. |
| └ browsers | Array | Array de nomes de navegadores. |
| └ devices | Array | Array de tipos de dispositivos. |
| └ main_image_url | String | URL da imagem principal do criativo. |
| └ is_adult | Boolean | Se o criativo contém conteúdo adulto. |
| └ is_active | Boolean | Se o criativo está atualmente ativo. |
| └ pagination | Object | Objeto de informações de paginação. |
| └ total | Número | Número total de criativos que correspondem aos filtros. |
| └ limit | Número | Número de itens por página. |
| └ offset | Número | Offset atual. |
| └ has_more | Boolean | Se há mais itens disponíveis. |
| └ returned_count | Número | Número de itens retornados nesta resposta. |
| └ filters_applied | Object | Objeto contendo os filtros aplicados. |
| └ timestamp | String | Timestamp da resposta no 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
Pesquisar criativos Facebook
Pesquisa de criativos do Facebook com vários filtros. Quando os resultados são poucos, a API pode iniciar uma pesquisa ao vivo e retornar um scrapingJob para polling.
Se scrapingJob.needStartPolling for true, chame o mesmo endpoint com isPolling=true e job_id para receber novos itens. Se o status for recently_completed ou rejected, nenhum job é criado e o polling não deve ser iniciado.
A pesquisa ao vivo inicia apenas quando exatamente um país é especificado no array countries.
A pesquisa ao vivo inicia apenas quando uma palavra-chave não vazia é fornecida.
URL da requisição
| Parâmetro | Tipo de dados | Obrigatório | Descrição |
|---|---|---|---|
| api_key | String | Sim | Chave API única para autenticação de requisições. |
| limit | Número | Não | Número de itens por página (10-100). Padrão: 10. |
| offset | Número | Não | Número de itens a pular. Usado para paginação. Padrão: 0. |
| keyword | String | Não | Palavra-chave de pesquisa para filtrar criativos por título ou descrição. |
| countries | Array | Não | Array de códigos ISO-2 de países (ex., ["US", "GB", "DE"]). |
| country_ids | Array | Não | Array de IDs de países do endpoint /api/filters/countries. Tem prioridade sobre countries. |
| languages | Array | Não | Array de códigos ISO de idiomas (ex., ["EN", "PT", "DE"]). |
| lang_ids | Array | Não | Array de IDs de idiomas do endpoint /api/filters/languages. Tem prioridade sobre languages. |
| date_from | String | Não | Data inicial para filtragem (formato: Y-m-d, ex., "2025-01-01"). |
| date_to | String | Não | Data final para filtragem (formato: Y-m-d, ex., "2025-12-31"). |
| sort_by | String | Não | Campo de ordenação: creation, activity, popularity. |
| sort_order | String | Não | Direção de ordenação: asc ou desc. |
| status | String | Não | Filtro de status do anúncio: ALL, ACTIVE, INACTIVE. |
| media_type | String | Não | Filtro de tipo de mídia: ALL, IMAGE, VIDEO. |
| search_type | String | Não | Tipo de pesquisa: keyword_unordered, keyword_exact_phrase. |
| isPolling | Boolean | Não | Ativar polling para atualizações de pesquisa ao vivo. Usar com job_id. |
| lastId | Número | Não | Último ID de criativo recebido para polling incremental (opcional). |
| perPage | Número | Não | Tamanho de página esperado para detecção de poucos resultados (12-96). |
| job_id | String | Não | ID de job de pesquisa ao vivo do scrapingJob. Obrigatório quando isPolling=true. |
| Parâmetro | Tipo de dados | Descrição |
|---|---|---|
| status | String | Campo indicando execução bem-sucedida ("success") ou erro ("error"). |
| msg | String | Mensagem de erro ou informações adicionais da requisição. |
| code | Número | Código de resposta, ex., 200 para requisição bem-sucedida. |
| data | Object | Array de dados de fluxos correspondentes à requisição. |
| └ format | String | Formato do criativo (push, inpage, facebook, tiktok). |
| └ items | Array | Array de objetos de criativos. |
| └ id | Número | Identificador único do criativo. |
| └ title | String | Texto do título do criativo. |
| └ description | String | Texto de descrição do criativo. |
| └ category | String | Formato/categoria do criativo (push, inpage, facebook, tiktok). |
| └ country | Object | Objeto de informações do país (code, name, iso_code_3). |
| └ code | String | Código ISO 3166-1 alpha-2 do país (ex., "BR" para Brasil). |
| └ name | String | Nome do país em inglês. |
| └ iso_code_3 | String | Código ISO 3166-1 alpha-3 do país (ex., "BRA" para Brasil). |
| └ file_size | String | Tamanho total do arquivo formatado. |
| └ icon_url | String | URL da imagem do ícone do criativo. |
| └ landing_url | String | URL da página de destino. |
| └ created_at | String | Data de criação do criativo (formato Y-m-d). |
| └ advertising_networks | Array | Array de nomes de redes de publicidade. |
| └ languages | Array | Array de códigos ISO de idiomas. |
| └ operating_systems | Array | Array de valores de sistemas operacionais. |
| └ browsers | Array | Array de nomes de navegadores. |
| └ devices | Array | Array de tipos de dispositivos. |
| └ main_image_url | String | URL da imagem principal do criativo. |
| └ has_video | Boolean | Se o criativo contém vídeo. |
| └ video_url | String | URL do vídeo (se has_video for true). |
| └ video_duration | Número | Duração do vídeo em segundos (se aplicável). |
| └ social_likes | Número | Número de likes (para anúncios sociais). |
| └ social_comments | Número | Número de comentários (para anúncios sociais). |
| └ social_shares | Número | Número de compartilhamentos (para anúncios sociais). |
| └ is_adult | Boolean | Se o criativo contém conteúdo adulto. |
| └ is_active | Boolean | Se o criativo está atualmente ativo. |
| └ pagination | Object | Objeto de informações de paginação. |
| └ total | Número | Número total de criativos que correspondem aos filtros. |
| └ limit | Número | Número de itens por página. |
| └ offset | Número | Offset atual. |
| └ has_more | Boolean | Se há mais itens disponíveis. |
| └ returned_count | Número | Número de itens retornados nesta resposta. |
| └ filters_applied | Object | Objeto contendo os filtros aplicados. |
| └ scrapingJob | Object | Objeto de job de pesquisa ao vivo (presente quando a pesquisa ao vivo está iniciada ou ativa). |
| └ type | String | Identificador de tipo de pesquisa ao vivo (ex., facebook_search). |
| └ status | String | Status do job: dispatched, running, post_processing, completed, failed, error, recently_completed, rejected. |
| └ needStartPolling | Boolean | Se o cliente deve começar o polling para atualizações. |
| └ needStopPolling | Boolean | Se o cliente deve parar o polling. |
| └ job_id | String | Identificador do job para polling (ausente quando o status é recently_completed ou rejected). |
| └ polling_interval_seconds | Número | Intervalo de polling recomendado em segundos. |
| └ estimatedDuration | Número | Duração estimada em segundos (0 quando completed ou recently_completed). |
| └ message | String | Mensagem de status adicional do servidor ou parser. |
| └ retry_after_seconds | Número | Quanto esperar antes de tentar novamente quando recently_completed/rejected (se fornecido). |
| └ error | String | Detalhes do erro (presente quando o status é failed ou error). |
| └ timestamp | String | Timestamp da resposta no 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.
Pesquisar criativos TikTok
Pesquisa de criativos do TikTok com vários filtros. Quando os resultados são poucos, a API pode iniciar uma pesquisa ao vivo e retornar um scrapingJob para polling.
Se scrapingJob.needStartPolling for true, chame o mesmo endpoint com isPolling=true e job_id para receber novos itens. Se o status for recently_completed ou rejected, nenhum job é criado e o polling não deve ser iniciado.
A pesquisa ao vivo inicia apenas quando exatamente um país é especificado no array countries.
A pesquisa ao vivo inicia apenas quando uma palavra-chave não vazia é fornecida.
URL da requisição
| Parâmetro | Tipo de dados | Obrigatório | Descrição |
|---|---|---|---|
| api_key | String | Sim | Chave API única para autenticação de requisições. |
| limit | Número | Não | Número de itens por página (10-100). Padrão: 10. |
| offset | Número | Não | Número de itens a pular. Usado para paginação. Padrão: 0. |
| keyword | String | Não | Palavra-chave de pesquisa para filtrar criativos por título ou descrição. |
| countries | Array | Não | Array de códigos ISO-2 de países (ex., ["US", "GB", "DE"]). |
| country_ids | Array | Não | Array de IDs de países do endpoint /api/filters/countries. Tem prioridade sobre countries. |
| languages | Array | Não | Array de códigos ISO de idiomas (ex., ["EN", "PT", "DE"]). |
| lang_ids | Array | Não | Array de IDs de idiomas do endpoint /api/filters/languages. Tem prioridade sobre languages. |
| date_from | String | Não | Data inicial para filtragem (formato: Y-m-d, ex., "2025-01-01"). |
| date_to | String | Não | Data final para filtragem (formato: Y-m-d, ex., "2025-12-31"). |
| sort_by | String | Não | Campo de ordenação: creation, activity, popularity. |
| sort_order | String | Não | Direção de ordenação: asc ou desc. |
| video_duration | String | Não | Filtro de duração de vídeo TikTok: ALL, SHORT, MEDIUM, LONG. |
| isPolling | Boolean | Não | Ativar polling para atualizações de pesquisa ao vivo. Usar com job_id. |
| lastId | Número | Não | Último ID de criativo recebido para polling incremental (opcional). |
| perPage | Número | Não | Tamanho de página esperado para detecção de poucos resultados (12-96). |
| job_id | String | Não | ID de job de pesquisa ao vivo do scrapingJob. Obrigatório quando isPolling=true. |
| Parâmetro | Tipo de dados | Descrição |
|---|---|---|
| status | String | Campo indicando execução bem-sucedida ("success") ou erro ("error"). |
| msg | String | Mensagem de erro ou informações adicionais da requisição. |
| code | Número | Código de resposta, ex., 200 para requisição bem-sucedida. |
| data | Object | Array de dados de fluxos correspondentes à requisição. |
| └ format | String | Formato do criativo (push, inpage, facebook, tiktok). |
| └ items | Array | Array de objetos de criativos. |
| └ id | Número | Identificador único do criativo. |
| └ title | String | Texto do título do criativo. |
| └ description | String | Texto de descrição do criativo. |
| └ category | String | Formato/categoria do criativo (push, inpage, facebook, tiktok). |
| └ country | Object | Objeto de informações do país (code, name, iso_code_3). |
| └ code | String | Código ISO 3166-1 alpha-2 do país (ex., "BR" para Brasil). |
| └ name | String | Nome do país em inglês. |
| └ iso_code_3 | String | Código ISO 3166-1 alpha-3 do país (ex., "BRA" para Brasil). |
| └ file_size | String | Tamanho total do arquivo formatado. |
| └ icon_url | String | URL da imagem do ícone do criativo. |
| └ landing_url | String | URL da página de destino. |
| └ created_at | String | Data de criação do criativo (formato Y-m-d). |
| └ advertising_networks | Array | Array de nomes de redes de publicidade. |
| └ languages | Array | Array de códigos ISO de idiomas. |
| └ operating_systems | Array | Array de valores de sistemas operacionais. |
| └ browsers | Array | Array de nomes de navegadores. |
| └ devices | Array | Array de tipos de dispositivos. |
| └ main_image_url | String | URL da imagem principal do criativo. |
| └ has_video | Boolean | Se o criativo contém vídeo. |
| └ video_url | String | URL do vídeo (se has_video for true). |
| └ video_duration | Número | Duração do vídeo em segundos (se aplicável). |
| └ social_likes | Número | Número de likes (para anúncios sociais). |
| └ social_comments | Número | Número de comentários (para anúncios sociais). |
| └ social_shares | Número | Número de compartilhamentos (para anúncios sociais). |
| └ is_adult | Boolean | Se o criativo contém conteúdo adulto. |
| └ is_active | Boolean | Se o criativo está atualmente ativo. |
| └ pagination | Object | Objeto de informações de paginação. |
| └ total | Número | Número total de criativos que correspondem aos filtros. |
| └ limit | Número | Número de itens por página. |
| └ offset | Número | Offset atual. |
| └ has_more | Boolean | Se há mais itens disponíveis. |
| └ returned_count | Número | Número de itens retornados nesta resposta. |
| └ filters_applied | Object | Objeto contendo os filtros aplicados. |
| └ scrapingJob | Object | Objeto de job de pesquisa ao vivo (presente quando a pesquisa ao vivo está iniciada ou ativa). |
| └ type | String | Identificador de tipo de pesquisa ao vivo (ex., facebook_search). |
| └ status | String | Status do job: dispatched, running, post_processing, completed, failed, error, recently_completed, rejected. |
| └ needStartPolling | Boolean | Se o cliente deve começar o polling para atualizações. |
| └ needStopPolling | Boolean | Se o cliente deve parar o polling. |
| └ job_id | String | Identificador do job para polling (ausente quando o status é recently_completed ou rejected). |
| └ polling_interval_seconds | Número | Intervalo de polling recomendado em segundos. |
| └ estimatedDuration | Número | Duração estimada em segundos (0 quando completed ou recently_completed). |
| └ message | String | Mensagem de status adicional do servidor ou parser. |
| └ retry_after_seconds | Número | Quanto esperar antes de tentar novamente quando recently_completed/rejected (se fornecido). |
| └ error | String | Detalhes do erro (presente quando o status é failed ou error). |
| └ timestamp | String | Timestamp da resposta no 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 fundos
URL da requisição
| Parâmetro | Tipo de dados | Obrigatório | Descrição |
|---|---|---|---|
| api_key | String | Sim | Chave API única para autenticação de requisições. |
| amount | Número | Sim | Valor da transferência (mínimo 10 USD). |
| String | Sim | Email do destinatário da transferência. Deve ser válido. |
| Parâmetro | Tipo de dados | Descrição |
|---|---|---|
| status | String | Campo indicando execução bem-sucedida ("success") ou erro ("error"). |
| msg | String | Mensagem de erro ou informações adicionais da requisição. |
| code | Número | Código de resposta, ex., 200 para requisição bem-sucedida. |
| transaction_number | String | Número de transação único associado à transferência. |
<?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>';
}
Obter saldo da conta
URL da requisição
| Parâmetro | Tipo de dados | Obrigatório | Descrição |
|---|---|---|---|
| api_key | String | Sim | Chave API única para autenticação de requisições. |
| Parâmetro | Tipo de dados | Descrição |
|---|---|---|
| status | String | Campo indicando execução bem-sucedida ("success") ou erro ("error"). |
| msg | String | Mensagem de erro ou informações adicionais da requisição. |
| code | Número | Código de resposta, ex., 200 para requisição bem-sucedida. |
| balance | Número | Saldo atual da conta do usuário. |
<?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>';
}