API de Snov.io
Las funciones de Snov.io se pueden utilizar a través de nuestra sencilla API REST. Integra con la API de Snov.io para sincronizar tus leads, encontrar emails, gestionar prospectos y más. La tasa de la API está limitada a 60 solicitudes por minuto.
Si estás en el plan gratuito, puedes solicitar un acceso de prueba reservando una demo personalizada con nuestro equipo. Para comenzar, cuéntanos cuál es tu objetivo específico para que podamos comprender mejor tus necesidades.
Casos de uso para las APIs de Snov.io
- Enriquece tus listas de prospectos para ampliar los datos para tu equipo de ventas
Encuentra direcciones de correo electrónico reales a partir de un nombre o dominio de empresa—ideal para expandir listas de prospectos o enriquecer datos existentes. - Inscripción automática de nuevos registros en campañas
Conecta tus formularios de registro y de eventos con la API de Snov.io para añadir instantáneamente nuevos prospectos a tus campañas. - Mantén tu base de datos de clientes limpia
Integra la verificación de correos electrónicos en tu CRM o herramientas de prospección para validar instantáneamente correos electrónicos de prospectos añadidos recientemente y mantener la información de los clientes existentes relevante. - Usa URLs de LinkedIn para completar automáticamente los detalles de los leads
Convierte la URL de un miembro básico de LinkedIn en un perfil rico, listo para CRM. Di adiós a la entrada de datos manual—hola a leads de alta calidad. - Comparte los resultados de la campaña en tiempo real
Extrae datos en vivo de tus campañas frías a paneles o diapositivas pulidas. Ofrece a tus interesados la información que necesitan, sin complicaciones. - Respeta las listas de no enviar correos
Añade automáticamente a los prospectos a las listas de no enviar correos para evitar contactos accidentales. Perfecto para mantener en línea a tu equipo de ventas, respetar las bajas y cumplir con las normas de privacidad de datos.
Integra estos métodos—y muchos más—en tu flujo de trabajo. Con nuestra API flexible, los casos de uso son prácticamente infinitos.
Autenticación
Es necesario generar un token de acceso para autenticar futuras solicitudes. Al realizar una solicitud, especifica este token de acceso en el campo Autorización.
| Authorization: Bearer QSlHffXmCAILIOHNGXToq4LsP2yX64VQhEBZ7Ei4 |
Este es un ejemplo de generación de tokens.
| POST | https://api.snov.io/v1/oauth/access_token |
grant_type | Siempre será client_credentials |
client_id | Tu identificación está disponible en la configuración de la cuenta https://app.snov.io/account/api |
client_secret | Tu clave secreta está disponible en la configuración de la cuenta https://app.snov.io/account/api |
<?php function getAccessToken() { $params = [ 'grant_type' => 'client_credentials', 'client_id' => 'c57a0459f6t141659ea75cccb393c5111', 'client_secret' => '77cbf92b71553e85ce3bfd505214f40b' ]; $options = [ CURLOPT_URL => 'https://api.snov.io/v1/oauth/access_token', CURLOPT_POST => true, CURLOPT_POSTFIELDS => $params, CURLOPT_RETURNTRANSFER => true, CURLOPT_FOLLOWLOCATION => true ]; $ch = curl_init(); curl_setopt_array($ch, $options); $res = json_decode(curl_exec($ch), true); curl_close($ch); return $res['access_token']; } ?>
def get_access_token(): params = { 'grant_type':'client_credentials', 'client_id':'c57a0459f6t141659ea75cccb393c111', 'client_secret': '77cbf92b71553e85ce3bfd505214f40b' } res = requests.post('https://api.snov.io/v1/oauth/access_token', data=params) resText = res.text.encode('ascii','ignore') return json.loads(resText)['access_token']
| { | |||
| |||
| } |
access_token | Tu nuevo token de acceso |
token_type | Siempre será Bearer |
expires_in | Tiempo de expiración del token (en segundos) |
Métodos API
POSTBúsqueda de dominio
1 crédito por cada solicitud única / 1 crédito por cada email del perfil de prospectoIngresa un nombre de dominio y Snov.io te devolverá información de la empresa, emails y perfiles de prospectos.
1 crédito por cada solicitud POST. No se te cobrará si no obtienes resultados.
| POST | https://api.snov.io/v2/domain-search/start |
domain | El nombre de dominio para el cual deseas recibir información de la empresa. Por ejemplo, "snov.io". |
<?php function companyInfoSearch() { $token = getAccessToken(); $params = [ 'domain' => 'snov.io', ]; $headers = [ 'Authorization: Bearer ' . $token, ]; $options = [ CURLOPT_URL => 'https://api.snov.io/v2/domain-search/start', CURLOPT_HTTPHEADER => $headers, CURLOPT_RETURNTRANSFER => true, CURLOPT_POST => true, CURLOPT_POSTFIELDS => $params, CURLOPT_FOLLOWLOCATION => true ]; $ch = curl_init(); curl_setopt_array($ch, $options); $response = json_decode(curl_exec($ch), true); curl_close($ch); return $response; } ?>
def company_info_search(): token = get_access_token() headers = {'authorization': f'Bearer {token}'} params = { 'domain': 'snov.io', } res = requests.post('https://api.snov.io/v2/domain-search/start', params=params, headers=headers) return json.loads(res.text)
{
"data": [],
"meta": {
"domain": "snov.io",
"task_hash": "6f15de14db954c761f8e7507547b3bd7"
},
"links": {
"result": "https://api.snov.io/v2/domain-search/result/6f15de14db954c761f8e7507547b3bd7"
}
}
domain | Dominio para el cual estás obteniendo información de la empresa. |
task_hash | ID único para la tarea de búsqueda que iniciaste. Se añade automáticamente a la URL de tu próxima solicitud para recibir los resultados. |
result | URL de solicitud que debes utilizar para recibir la información de la empresa. |
| GET | https://api.snov.io/v2/domain-search/result/{task_hash} |
<?php function companyInfoResult() { $token = getAccessToken(); $task_hash = 'b10e4c47693dbf87cc8de16edcc8ae22'; $headers = [ 'Authorization: Bearer ' . $token, ]; $options = [ CURLOPT_URL => 'https://api.snov.io/v2/domain-search/result/$task_hash', CURLOPT_HTTPHEADER => $headers, CURLOPT_RETURNTRANSFER => true, CURLOPT_FOLLOWLOCATION => true ]; $ch = curl_init(); curl_setopt_array($ch, $options); $response = json_decode(curl_exec($ch), true); curl_close($ch); return $response; } ?>
def company_info_result(): token = get_access_token() task_hash = '86586db9ac64ae5471eb18fc71b0dd5e' headers = {'authorization': f'Bearer {token}'} res = requests.get(f'https://api.snov.io/v2/domain-search/result/{task_hash}', headers=headers) return json.loads(res.text)
{
"data": {
"company_name": "Snov.io",
"city": "New York",
"founded": "2017",
"website": "snov.io",
"hq_phone": "13477050819",
"industry": "Computer Software",
"size": "51-200",
"related_domains": [
"snov.me",
"snov.com",
"snov.nl",
"snov.com.ua",
"snov.cl"
]
},
"meta": {
"domain": "snov.io",
"task_hash": "6f15de14db954c761f8e7507547b3bd7",
"prospects_count": 196,
"emails_count": 108,
"generic_contacts_count": 9
},
"links": {
"prospects": "https://api.snov.io/v2/domain-search/prospects/start?domain=snov.io",
"domain_emails": "https://api.snov.io/v2/domain-search/domain-emails/start?domain=snov.io",
"generic_contacts": "https://api.snov.io/v2/domain-search/generic-contacts/start?domain=snov.io"
},
"status": "completed"
}
company_name | El nombre de la empresa asociado con el dominio. |
city | La ciudad en la que se encuentra la sede de la empresa. |
founded | El año en que se fundó la empresa. |
website | La dirección del sitio web de la empresa. |
hq_phone | El número de teléfono de la sede de la empresa. |
industry | Industria de la empresa. |
size | El número de empleados que tiene la empresa. |
related_domains | Dominios con el mismo SLD (dominio de segundo nivel) que el dominio para el que estás solicitando datos. |
domain | El nombre de dominio para el cual la API ha proporcionado la información de la empresa. |
task_hash | ID único para la tarea de búsqueda que iniciaste. |
prospects_count | El número de perfiles de prospectos recuperados de tu solicitud. |
emails_count | El número de emails de dominio recuperados de tu solicitud. |
generic_contacts_count | El número de emails genéricos recuperados de tu solicitud. |
prospects | URL para solicitar una lista con perfiles completos de prospectos. |
domain_emails | URL para solicitar una lista con emails de dominio. |
generic_contacts | URL para solicitar una lista con emails genéricos de la empresa. |
status | Estado de la solicitud. Puede ser completado o en progreso. |
| POST | https://api.snov.io/v2/domain-search/prospects/start |
domain | El nombre de dominio para el cual deseas encontrar perfiles de prospectos. Por ejemplo, "snov.io". |
positions[] | Utiliza este parámetro para filtrar prospectos por puesto de trabajo, por ejemplo, "Desarrollador de Software". Para filtrar por múltiples puestos, ingresa un array con los puestos necesarios, separados por coma. Puedes filtrar hasta 10 puestos por solicitud. |
page | Número de página que contiene los perfiles de prospectos. Cada página muestra hasta 20 perfiles. Si no se indica la página, por defecto se devolverá la primera página. |
<?php function prospectsSearch() { $token = getAccessToken(); $params = [ 'domain' => 'snov.io', 'page' => 1, 'positions' => ['Web developer','QA Engineer'] ]; $headers = [ 'Authorization: Bearer ' . $token, ]; $options = [ CURLOPT_URL => 'https://api.snov.io/v2/domain-search/start', CURLOPT_HTTPHEADER => $headers, CURLOPT_RETURNTRANSFER => true, CURLOPT_POST => true, CURLOPT_POSTFIELDS => http_build_query($params), CURLOPT_FOLLOWLOCATION => true ]; $ch = curl_init(); curl_setopt_array($ch, $options); $response = json_decode(curl_exec($ch), true); curl_close($ch); return $response; } ?>
def prospects_search(): token = get_access_token() headers = {'authorization': f'Bearer {token}'} params = { 'domain': 'snov.io', 'page': 1, 'positions[]': ['Web developer', 'QA Engineer'] } res = requests.post('https://api.snov.io/v2/domain-search/prospects/start', params=params, headers=headers) return json.loads(res.text)
{
"data": [],
"meta": {
"domain": "snov.io",
"tab": "prospects",
"task_hash": "3384369c16aad810f58609a40ad65089",
"page": 1,
"positions": [
"Web developer",
"QA Engineer"
]
},
"links": {
"result": "https://api.snov.io/v2/domain-search/prospects/result/3384369c16aad810f58609a40ad65089"
}
}
domain | Dominio para el cual estás obteniendo perfiles de prospectos. |
tab | Muestra el tipo de resultados que estás solicitando. prospectos indica que estás buscando perfiles de prospectos. emails muestra emails de dominio. servicio indica que estás obteniendo emails genéricos. |
task_hash | ID único para la tarea de búsqueda que iniciaste. Se añade automáticamente a la URL de tu próxima solicitud para recibir los resultados. |
page | Número de página que contiene los perfiles de prospectos. Cada página muestra hasta 20 perfiles. |
positions | Puestos de trabajo utilizados para filtrar los resultados. |
result | URL de solicitud que debes utilizar para recibir perfiles de prospectos. |
| GET | https://api.snov.io/v2/domain-search/prospects/result/{task_hash} |
<?php function prospectsResult() { $token = getAccessToken(); $task_hash = '3384369c16aad810f58609a40ad65089'; $headers = [ 'Authorization: Bearer ' . $token, ]; $options = [ CURLOPT_URL => 'https://api.snov.io/v2/domain-search/prospects/result/$task_hash', CURLOPT_HTTPHEADER => $headers, CURLOPT_RETURNTRANSFER => true, CURLOPT_FOLLOWLOCATION => true ]; $ch = curl_init(); curl_setopt_array($ch, $options); $response = json_decode(curl_exec($ch), true); curl_close($ch); return $response; } ?>
def prospects_result(): token = get_access_token() task_hash = '3384369c16aad810f58609a40ad65089' headers = {'authorization': f'Bearer {token}'} res = requests.get(f'https://api.snov.io/v2/domain-search/prospects/result/{task_hash}', headers=headers) return json.loads(res.text)
{
"data": [
{
"first_name": "John",
"last_name": "Doe",
"position": "Web developer",
"source_page": "https://www.linkedin.com/in/john-doe/",
"search_emails_start": "https://api.snov.io/v2/domain-search/prospects/search-emails/start/41627edbfff8ba9c0819a1aa51d232baf3fa1763e5813dc86e027ccbbefd7a16b0522391086776b8764c94d02bab1257df392"
}
],
"meta": {
"domain": "snov.io",
"tab": "prospects",
"task_hash": "3384369c16aad810f58609a40ad65089",
"page": 1,
"positions": [
"Web developer",
"QA Engineer"
],
"total_count": 18
},
"links": {
"next": ""
},
"status": "completed"
}
first_name | Nombre del prospecto. |
last_name | Apellido del prospecto. |
position | Puesto de trabajo del prospecto. |
source_page | La página de origen de los datos personales recuperados. |
search_emails_start | URL para tu próxima solicitud para buscar el email del prospecto. |
domain | Dominio para el cual estás obteniendo perfiles de prospectos. |
tab | Muestra el tipo de resultados que estás obteniendo. prospectos indica que estás buscando perfiles de prospectos. emails muestra emails de dominio. servicio indica que estás obteniendo emails genéricos. |
task_hash | ID único para la tarea de búsqueda que iniciaste. |
page | Número de página que contiene los perfiles de prospectos. Cada página muestra hasta 20 perfiles. |
positions | Puestos de trabajo utilizados para filtrar los resultados. |
total_count | Número total de perfiles de prospectos encontrados. |
next | URL para tu próxima solicitud para recuperar resultados de la siguiente página. Cada página tiene hasta 20 prospectos. |
status | Estado de la solicitud. Puede ser completado o en progreso. |
| POST | https://api.snov.io/v2/domain-search/prospects/search-emails/start/{prospect_hash} |
<?php function searchProspectEmailsStart() { $token = getAccessToken(); $headers = [ 'Authorization: Bearer ' . $token, ]; $task = '41627edbfff8ba9c0819a1aa51d232baf3fa1763e5813dc86e027ccbbefd7a16b0522391086776b8764c94d02bab1257df392'; $options = [ CURLOPT_URL => 'https://api.snov.io/v2/domain-search/prospects/search-emails/start/$task', CURLOPT_HTTPHEADER => $headers, CURLOPT_RETURNTRANSFER => true, CURLOPT_POST => true, CURLOPT_FOLLOWLOCATION => true ]; $ch = curl_init(); curl_setopt_array($ch, $options); $response = json_decode(curl_exec($ch), true); curl_close($ch); return $response; } ?>
def search_prospect_emails_start(): token = get_access_token() headers = {'authorization': f'Bearer {token}'} res = requests.post(f'https://api.snov.io/v2/domain-search/prospects/search-emails/start/' f'a811d72df2e52bd447621c4a1326e540102f3b70ba39a81bd597020ed0b9f812ee8de7e0f4ecad312716d03576fdf0af6d8277e1', headers=headers) return json.loads(res.text)
{
"data": [],
"meta": {
"task_hash": "5e846a1d80d95f66cfb30250a7c1881f"
},
"links": {
"result": "https://api.snov.io/v2/domain-search/prospects/search-emails/result/5e846a1d80d95f66cfb30250a7c1881f"
}
}
task_hash | ID único para la tarea de búsqueda que iniciaste. |
result | URL para tu próxima solicitud para obtener el email del prospecto. |
| GET | https://api.snov.io/v2/domain-search/prospects/search-emails/result/{task_hash} |
<?php function searchProspectEmailsResult() { $token = getAccessToken(); $task_hash = '5e846a1d80d95f66cfb30250a7c1881f'; $headers = [ 'Authorization: Bearer ' . $token, ]; $options = [ CURLOPT_URL => 'https://api.snov.io/v2/domain-search/prospects/search-emails/result/$task_hash', CURLOPT_HTTPHEADER => $headers, CURLOPT_RETURNTRANSFER => true, CURLOPT_FOLLOWLOCATION => true ]; $ch = curl_init(); curl_setopt_array($ch, $options); $response = json_decode(curl_exec($ch), true); curl_close($ch); return $response; } ?>
def search_prospect_emails_result(): token = get_access_token() task_hash = '7f1df5bd8bca6f66e38dad0ffb30ba4c' headers = {'authorization': f'Bearer {token}'} res = requests.get(f'https://api.snov.io/v2/domain-search/prospects/search-emails/result/{task_hash}', headers=headers) return json.loads(res.text)
{
"data": {
"searching_date": "2025-01-01 11:11:11",
"emails": [
{
"email": "example@snov.io",
"smtp_status": "valid"
}
]
},
"meta": {
"task_hash": "5e846a1d80d95f66cfb30250a7c1881f"
},
"links": [],
"status": "completed"
}
searching_date | Fecha en la que se realizó la búsqueda del email. |
emails | Emails de prospectos. |
smtp_status | Puede devolver válido, o desconocido (también conocido como no verificable). Puedes aprender más sobre los estados de los correos electrónicos aquí. |
task_hash | ID único para la tarea de búsqueda que iniciaste. |
status | Estado de la solicitud. Puede ser completado o en progreso. |
| POST | https://api.snov.io/v2/domain-search/domain-emails/start |
domain | Nombre de dominio de la empresa para el cual deseas encontrar emails de dominio. Por ejemplo, "snov.io". |
<?php function domainEmailsSearch() { $token = getAccessToken(); $params = [ 'domain' => 'snov.io', ]; $headers = [ 'Authorization: Bearer ' . $token, ]; $options = [ CURLOPT_URL => 'https://api.snov.io/v2/domain-search/domain-emails/start', CURLOPT_HTTPHEADER => $headers, CURLOPT_RETURNTRANSFER => true, CURLOPT_POST => true, CURLOPT_POSTFIELDS => $params, CURLOPT_FOLLOWLOCATION => true ]; $ch = curl_init(); curl_setopt_array($ch, $options); $response = json_decode(curl_exec($ch), true); curl_close($ch); return $response; } ?>
def domain_emails_search(): token = get_access_token() headers = {'authorization': f'Bearer {token}'} params = { 'domain': 'snov.io' } res = requests.post('https://api.snov.io/v2/domain-search/domain-emails/start', params=params, headers=headers) return json.loads(res.text)
{
"data": [],
"meta": {
"domain": "snov.io",
"tab": "emails",
"task_hash": "36fce9ac2667a827f6c5ab954e288bed",
"next": ""
},
"links": {
"result": "https://api.snov.io/v2/domain-search/domain-emails/result/36fce9ac2667a827f6c5ab954e288bed"
}
}
domain | Dominio para el cual estás obteniendo emails. |
tab | Muestra el tipo de resultados que estás solicitando. prospectos indica que estás buscando perfiles de prospectos. emails muestra emails de dominio. servicio indica que estás obteniendo emails genéricos. |
task_hash | ID único para la tarea de búsqueda que iniciaste. Se añade automáticamente a la URL de tu próxima solicitud para recibir los resultados. |
next | ID para la siguiente solicitud de página, si existe una. Si no hay más páginas disponibles, estará vacío. |
result | URL de solicitud que debes utilizar para recibir emails de dominio. |
| GET | https://api.snov.io/v2/domain-search/domain-emails/result/{task_hash} |
<?php function domainEmailsResult() { $token = getAccessToken(); $task_hash = '36fce9ac2667a827f6c5ab954e288bed'; $headers = [ 'Authorization: Bearer ' . $token, ]; $options = [ CURLOPT_URL => 'https://api.snov.io/v2/domain-search/domain-emails/result/$task_hash', CURLOPT_HTTPHEADER => $headers, CURLOPT_RETURNTRANSFER => true, CURLOPT_FOLLOWLOCATION => true ]; $ch = curl_init(); curl_setopt_array($ch, $options); $response = json_decode(curl_exec($ch), true); curl_close($ch); return $response; } ?>
def domain_emails_result(): token = get_access_token() task_hash = '36fce9ac2667a827f6c5ab954e288bed' headers = {'authorization': f'Bearer {token}'} res = requests.get(f'https://api.snov.io/v2/domain-search/domain-emails/result/{task_hash}', headers=headers) return json.loads(res.text)
{
"data": [
{
"email": "admin@snov.io"
},
{
"email": "help@snov.io"
}
],
"meta": {
"domain": "snov.io",
"tab": "emails",
"task_hash": "36fce9ac2667a827f6c5ab954e288bed",
"next": "4ae6ca51c056c584db03c618dfe80dedb82ec37ab4667fa189386c82288a7422e8f4ab1010d84a13f2728d8f1b12b2ff139e3cb81108dc48",
"total_count": 108
},
"links": {
"next": "https://api.snov.io/v2/domain-search/domain-emails/start?domain=snov.io&next=4ae6ca51c056c584db03c618dfe80dedb82ec37ab4667fa189386c82288a7422e8f4ab1010d84a13f2728d8f1b12b2ff139e3cb81108dc48"
},
"status": "completed"
}
email | Dirección de email del dominio. Ten en cuenta que estos emails no están verificados. Para verificarlos, utiliza el método de Verificación de Emails. |
domain | Dominio para el cual estás obteniendo emails. |
tab | Muestra el tipo de resultados que estás obteniendo. prospectos indica que estás buscando perfiles de prospectos. emails muestra emails de dominio. servicio indica que estás obteniendo emails genéricos. |
task_hash | ID único para la tarea de búsqueda que iniciaste. |
next | ID añadido a la URL de solicitud para acceder a la siguiente página de emails en caso de que exista. |
total_count | Número total de emails de dominio encontrados. |
next | URL de la solicitud para recuperar los resultados de la siguiente página en caso de que exista. Cada página tiene hasta 50 emails. |
status | Estado de la solicitud. Puede ser completado o en progreso. |
| POST | https://api.snov.io/v2/domain-search/generic-contacts/start |
domain | Nombre de dominio de la empresa para la cual deseas encontrar emails genéricos. Por ejemplo, "snov.io". |
<?php function genericContactsSearch() { $token = getAccessToken(); $params = [ 'domain' => 'snov.io', ]; $headers = [ 'Authorization: Bearer ' . $token, ]; $options = [ CURLOPT_URL => 'https://api.snov.io/v2/domain-search/generic-contacts/start', CURLOPT_HTTPHEADER => $headers, CURLOPT_RETURNTRANSFER => true, CURLOPT_POST => true, CURLOPT_POSTFIELDS => $params, CURLOPT_FOLLOWLOCATION => true ]; $ch = curl_init(); curl_setopt_array($ch, $options); $response = json_decode(curl_exec($ch), true); curl_close($ch); return $response; } ?>
def generic_contacts_search(): token = get_access_token() headers = {'authorization': f'Bearer {token}'} params = { 'domain': 'snov.io' } res = requests.post('https://api.snov.io/v2/domain-search/generic-contacts/start', params=params, headers=headers) return json.loads(res.text)
{
"data": [],
"meta": {
"domain": "snov.io",
"tab": "service",
"task_hash": "0e36e43b9b91a9b20d14b82c1ee141f2",
"next": ""
},
"links": {
"result": "https://api.snov.io/v2/domain-search/generic-contacts/result/0e36e43b9b91a9b20d14b82c1ee141f2"
}
}
domain | Dominio para el cual estás obteniendo emails genéricos. |
tab | Muestra el tipo de resultados que estás solicitando. prospectos indica que estás buscando perfiles de prospectos. emails muestra emails de dominio. servicio indica que estás obteniendo emails genéricos. |
task_hash | ID único para la tarea de búsqueda que iniciaste. Se añade automáticamente a la URL de tu próxima solicitud para recibir los resultados. |
next | ID para la siguiente solicitud de página, si existe una. Si no hay más páginas disponibles, estará vacío. |
result | URL de solicitud que debes utilizar para recibir emails genéricos. |
| GET | https://api.snov.io/v2/domain-search/generic-contacts/result/{task_hash} |
<?php function genericContactsResult() { $token = getAccessToken(); $task_hash = '0e36e43b9b91a9b20d14b82c1ee141f2'; $headers = [ 'Authorization: Bearer ' . $token, ]; $options = [ CURLOPT_URL => 'https://api.snov.io/v2/domain-search/generic-contacts/result/$task_hash', CURLOPT_HTTPHEADER => $headers, CURLOPT_RETURNTRANSFER => true, CURLOPT_FOLLOWLOCATION => true ]; $ch = curl_init(); curl_setopt_array($ch, $options); $response = json_decode(curl_exec($ch), true); curl_close($ch); return $response; } ?>
def generic_contacts_result(): token = get_access_token() task_hash = '0e36e43b9b91a9b20d14b82c1ee141f2' headers = {'authorization': f'Bearer {token}'} res = requests.get(f'https://api.snov.io/v2/domain-search/generic-contacts/result/{task_hash}', headers=headers) return json.loads(res.text)
{
"data": [
{
"email": "orders@snov.io"
},
{
"email": "sales@snov.io"
}
],
"meta": {
"domain": "snov.io",
"tab": "service",
"task_hash": "0e36e43b9b91a9b20d14b82c1ee141f2",
"next": "",
"total_count": 9
},
"links": {
"next": ""
},
"status": "completed"
}
email | Dirección de email del contacto genérico. Ten en cuenta que estos emails no están verificados. Para verificarlos, utiliza el método de Verificación de Emails. |
domain | Dominio para el cual estás obteniendo emails genéricos. |
tab | Muestra el tipo de resultados que estás obteniendo. prospectos indica que estás buscando perfiles de prospectos. emails muestra emails de dominio. servicio indica que estás obteniendo emails genéricos. |
task_hash | ID único para la tarea de búsqueda que iniciaste. |
next | ID añadido a la URL de solicitud para acceder a la siguiente página de emails en caso de que exista. |
total_count | Número total de emails genéricos encontrados para el dominio. |
next | URL de la solicitud para recuperar los resultados de la siguiente página en caso de que exista. Cada página tiene hasta 50 emails. |
status | Estado de la solicitud. Puede ser completado o en progreso. |
POSTVerificar el número de correos disponibles
GratisCon este método de la API, puedes averiguar el número de direcciones de email de un determinado dominio en nuestra base de datos. Es completamente gratuito, por lo que no necesitas créditos para utilizarlo.
| POST | https://api.snov.io/v1/get-domain-emails-count |
domain | El nombre del dominio para el que deseas conocer el número de emails en nuestra base de datos. |
<?php function getEmailCount() { $token = getAccessToken(); $params = [ 'access_token' => $token, 'domain' => 'octagon.com', ]; $options = [ CURLOPT_URL => 'https://api.snov.io/v1/get-domain-emails-count', CURLOPT_POST => true, CURLOPT_POSTFIELDS => $params, CURLOPT_RETURNTRANSFER => true, CURLOPT_FOLLOWLOCATION => true ]; $ch = curl_init(); curl_setopt_array($ch, $options); $res = json_decode(curl_exec($ch), true); curl_close($ch); return $res; } ?>
def get_email_count(): token = get_access_token() params = {'access_token':token, 'domain':'octagon.com' } res = requests.post('https://api.snov.io/v1/get-domain-emails-count', data=params) return json.loads(res.text)
| { | ||||
| ||||
| } |
domain | El nombre del dominio para el que deseas conocer el número de emails en nuestra base de datos. |
webmail | Es true si el dominio que buscas es webmail. |
result | Número total de direcciones de emails que hemos encontrado para este dominio. No podemos proporcionar resultados para dominios de webmail, por lo que el resultado para webmail siempre será 0
. |
POSTEncontrar correos a partir del nombre y el dominio
1 crédito por cada email con un estado válido o desconocido.Ingresa el nombre del prospecto y el dominio de la empresa, y Snov.io devolverá su dirección de email verificada.
| POST | https://api.snov.io/v2/emails-by-domain-by-name/start |
La forma más fácil de enviar esta solicitud es a través de un cuerpo de JSON en bruto. Dicho esto, aquí tienes un ejemplo si prefieres usar Parámetros
rows | Un array de objetos que contienen detalles del prospecto (nombre, apellido y dominio). Cada solicitud puede tener hasta 10 objetos. |
first_name | Nombre del prospecto. |
last_name | Apellido del prospecto. |
domain | El dominio de la empresa para la que trabaja el prospecto. |
webhook_url | Ingresa tu URL de webhook para recibir resultados de inmediato en lugar de usar una tarea de hash. |
<?php function emailsByDomainByNameSearch() { $token = getAccessToken(); $headers = [ 'Authorization: Bearer ' . $token, ]; $params = [ 'rows' => [ [ 'first_name' => 'John', 'last_name' => 'Doe', 'domain' => 'yourdomain.com', ], [ 'first_name' => 'John', 'last_name' => 'Doe', 'domain' => 'yourdomain.com', ] ], 'webhook_url' => 'https://hooks.yourdomain.com', ]; $options = [ CURLOPT_URL => 'https://api.snov.io/v2/emails-by-domain-by-name/start', CURLOPT_HTTPHEADER => $headers, CURLOPT_RETURNTRANSFER => true, CURLOPT_POST => true, CURLOPT_POSTFIELDS => http_build_query($params), CURLOPT_FOLLOWLOCATION => true ]; $ch = curl_init(); curl_setopt_array($ch, $options); $response = json_decode(curl_exec($ch), true); curl_close($ch); return $response; } ?>
def emails_by_domain_by_name_search(): token = get_access_token() headers = { 'authorization': f'Bearer {token}', 'Content-Type': 'application/json' } payload = json.dumps({ 'rows': [ { 'first_name': 'John', 'last_name': 'Doe', 'domain': 'yourdomain.com' }, { 'first_name': 'Jane', 'last_name': 'Doe', 'domain': 'yourdomain.com' }, ], 'webhook_url': 'https://hooks.yourdomain.com' }) res = requests.post('https://api.snov.io/v2/emails-by-domain-by-name/start', data=payload, headers=headers) return json.loads(res.text)
{
"data": {
"task_hash": "005ffad65aad581943cf65a45112ca7a"
},
"meta": {
"rows": [
{
"first_name": "John",
"last_name": "Doe",
"domain": "yourdomain.com"
},
{
"first_name": "Jane",
"last_name": "Doe",
"domain": "yourdomain.com"
}
]
}
}
task_hash | ID único para la tarea de búsqueda que iniciaste. |
first_name | Nombre del prospecto. |
last_name | Apellido del prospecto. |
domain | El dominio de la empresa para la que trabaja el prospecto. |
| GET | https://api.snov.io/v2/emails-by-domain-by-name/result |
task_hash | ID de solicitud único que recibiste de la solicitud anterior. |
<?php function emailsByDomainByNameResult() { $token = getAccessToken(); $task_hash = '475d03ac6f98c124349b0f2efb506702'; $headers = [ 'Authorization: Bearer ' . $token, ]; $options = [ CURLOPT_URL => 'https://api.snov.io/v2/emails-by-domain-by-name/result?task_hash=$task_hash', CURLOPT_HTTPHEADER => $headers, CURLOPT_RETURNTRANSFER => true, CURLOPT_FOLLOWLOCATION => true ]; $ch = curl_init(); curl_setopt_array($ch, $options); $response = json_decode(curl_exec($ch), true); curl_close($ch); return $response; } ?>
def emails_by_domain_by_name_result(): token = get_access_token() task_hash = '0d0c862099b22bdf300b8c8e67754e49' headers = {'authorization': f'Bearer {token}'} params = {'task_hash': task_hash} res = requests.get(f'https://api.snov.io/v2/emails-by-domain-by-name/result', params=params, headers=headers) return json.loads(res.text)
{
"status": "completed",
"data": [
{
"people": "John Doe",
"result": [
{
"email": "john.doe@yourdomain.com",
"smtp_status": "valid",
"is_valid_format": true,
"is_disposable": false,
"is_webmail": false,
"is_gibberish": false
}
]
},
{
"people": "Jane Doe",
"result": [
{
"email": "jane.doe@yourdomain.com",
"smtp_status": "unknown",
"is_valid_format": true,
"is_disposable": false,
"is_webmail": false,
"is_gibberish": false,
"unknown_status_reason": "catchall"
}
]
}
],
"meta": {
"rows": [
{
"domain": "yourdomain.com",
"last_name": "Doe",
"first_name": "John"
},
{
"domain": "yourdomain.com",
"last_name": "Doe",
"first_name": "Jane"
}
],
"task_hash": "af50fb238757ad092ad6e57e130b0dea"
}
}
status | Estado de la solicitud. Puede ser completed o in_progress. Puedes recibir el estado not_enough_credits si la cuenta que estás utilizando para la búsqueda no tiene suficientes créditos. |
people | Nombre completo del prospecto. |
email | Email del prospecto. |
smtp_status | Puede devolver valid, o unknown (también conocido como No verificable). Para ver la razón del estado desconocido, revisa el parámetro unknown_status_reason. |
is_valid_format | Muestra si el formato del email es válido. Puede ser false o true. |
is_disposable | Indica si un email es temporal o desechable, devolviendo false o true. |
is_webmail | Es true si el email que estás buscando es webmail. |
is_gibberish | Muestra si la dirección de email proporcionada tiene caracteres aleatorios o sin sentido. Será false o true. |
unknown_status_reason | Si un email verificado tiene un smtp_status desconocido, puedes encontrar una razón más detallada aquí. Banned: Alto riesgo de entregabilidad - este email no se pudo verificar con un 100% de certeza. Catchall: Riesgo de reputación del remitente - este email es un catch-all. Connection_error: Riesgo de rebote potencial - problemas técnicos del lado del destinatario. Greylist: Riesgo de entregabilidad - este servidor de email utiliza filtros de lista gris. |
domain | Dominio de la empresa para la que trabaja el prospecto. |
first_name | Nombre del prospecto. |
last_name | Apellido del prospecto. |
task_hash | ID único para esta tarea de búsqueda. |
POSTEncuentra el dominio del nombre de la empresa
1 crédito por cada dirección de dominio encontradaIngresa los nombres de las empresas y Snov.io devolverá sus direcciones de dominio.
| POST | https://api.snov.io/v2/company-domain-by-name/start |
names[] | Un array de nombres de empresas para las que deseas recibir los dominios. Para recuperar dominios de múltiples empresas, agrega cada una como un parámetro separado. Por ejemplo: names[] | Snov.io names[] | Sendpulse Puedes proporcionar hasta 10 nombres de empresas al mismo tiempo. |
webhook_url | Ingresa tu URL de webhook para recibir resultados de inmediato en lugar de usar una tarea de hash. |
<?php function companyDomainByNameStart() { $token = getAccessToken(); $params = [ 'names' => ['Snov.io','SendPulse'], 'webhook_url' => 'https://hooks.yourdomain.com', ]; $headers = [ 'Authorization: Bearer ' . $token, ]; $options = [ CURLOPT_URL => 'https://api.snov.io/v2/company-domain-by-name/start', CURLOPT_HTTPHEADER => $headers, CURLOPT_RETURNTRANSFER => true, CURLOPT_POST => true, CURLOPT_POSTFIELDS => http_build_query($params), CURLOPT_FOLLOWLOCATION => true ]; $ch = curl_init(); curl_setopt_array($ch, $options); $response = json_decode(curl_exec($ch), true); curl_close($ch); return $response; } ?>
def company_domain_by_name_start(): token = get_access_token() headers = {'authorization': f'Bearer {token}'} params = { 'webhook_url': 'https://hooks.yourdomain.com', 'names[]': ['Snov.io', 'Sendpulse'] } res = requests.post('https://api.snov.io/v2/company-domain-by-name/start', params=params, headers=headers) return json.loads(res.text)
{
"data": {
"task_hash": "959c0f60facb8629bba746e091a26f7b"
},
"meta": {
"names": [
"Snov.io",
"Sendpulse"
]
}
}
task_hash | ID único para la tarea de búsqueda que iniciaste. |
names | Un array de nombres de empresas que proporcionaste. |
| GET | https://api.snov.io/v2/company-domain-by-name/result?task_hash={hash_from_1} |
task_hash | ID de solicitud único que recibiste de la solicitud anterior. |
<?php function companyDomainByNameResult() { $token = getAccessToken(); $task_hash = '48c156a785cfc1f3b0edab2cc28b3774'; $headers = [ 'Authorization: Bearer ' . $token, ]; $options = [ CURLOPT_URL => 'https://api.snov.io/v2/company-domain-by-name/result?task_hash=$task_hash', CURLOPT_HTTPHEADER => $headers, CURLOPT_RETURNTRANSFER => true, CURLOPT_FOLLOWLOCATION => true ]; $ch = curl_init(); curl_setopt_array($ch, $options); $response = json_decode(curl_exec($ch), true); curl_close($ch); return $response; } ?>
def company_domain_by_name_result(): token = get_access_token() task_hash = '959c0f60facb8629bba746e091a26f7b' headers = {'authorization': f'Bearer {token}'} params = { 'task_hash': task_hash } res = requests.get(f'https://api.snov.io/v2/company-domain-by-name/result', params=params, headers=headers) return json.loads(res.text)
{
"status": "completed",
"data": [
{
"name": "Snov.io",
"result": {
"domain": "snov.io"
}
},
{
"name": "Sendpulse",
"result": {
"domain": "sendpulse.com"
}
}
],
"meta": {
"names": [
"Snov.io",
"Sendpulse"
],
"task_hash": "959c0f60facb8629bba746e091a26f7b"
}
}
status | Estado de la solicitud. Puede ser completed o in_progress. |
name | Nombre de la empresa para la que solicitaste una dirección de dominio. |
domain | Dominio de la empresa. |
names | Un array de nombres de empresas que proporcionaste. |
task_hash | ID único para esta tarea de búsqueda. |
POSTObtener información del perfil de LinkedIn desde URLs
1 crédito por cada información del perfil de prospecto proporcionadaIngresa las URLs de los miembros de LinkedIn y Snov.io recuperará su información de perfil completa.
| POST | https://api.snov.io/v2/li-profiles-by-urls/start |
urls[] | Un array de URLs de perfiles de LinkedIn para las que deseas recibir la información completa del perfil. Para recuperar información de perfil de múltiples miembros de LinkedIn al mismo tiempo, agrega cada URL como un parámetro separado. Puedes proporcionar hasta 10 URLs de LinkedIn al mismo tiempo. |
webhook_url | Ingresa tu URL de webhook para recibir resultados de inmediato en lugar de usar una tarea de hash. |
<?php function linkedInProfilesByUrlsStart() { $token = getAccessToken(); $params = [ 'urls' => ['https://www.linkedin.com/in/oleksii-kratko-6a0544187/','https://www.linkedin.com/in/atahualpamaia/'], 'webhook_url' => 'https://hooks.yourdomain.com', ]; $headers = [ 'Authorization: Bearer ' . $token, ]; $options = [ CURLOPT_URL => 'https://api.snov.io/v2/li-profiles-by-urls/start', CURLOPT_HTTPHEADER => $headers, CURLOPT_RETURNTRANSFER => true, CURLOPT_POST => true, CURLOPT_POSTFIELDS => http_build_query($params), CURLOPT_FOLLOWLOCATION => true ]; $ch = curl_init(); curl_setopt_array($ch, $options); $response = json_decode(curl_exec($ch), true); curl_close($ch); return $response; } ?>
def linkedin_profiles_by_urls_start(): token = get_access_token() headers = {'authorization': f'Bearer {token}'} params = { 'urls[]': ['https://www.linkedin.com/in/atahualpamaia/', 'https://www.linkedin.com/in/oleksii-kratko-6a0544187/'], 'webhook_url': 'https://hooks.yourdomain.com', } res = requests.post('https://api.snov.io/v2/li-profiles-by-urls/start', params=params, headers=headers) return json.loads(res.text)
{
"data": {
"task_hash": "ef005a4f6d82e7e88384de7c72ee198d"
},
"meta": {
"urls": [
"https://www.linkedin.com/in/john-doe-32a416248/",
"https://www.linkedin.com/in/john-doe-04bb56b1/",
"https://www.linkedin.com/in/john-jungwoo-do/"
]
}
}
task_hash | ID único para la tarea de búsqueda que iniciaste. |
urls | URLs de perfiles para los que estás solicitando la información. |
| GET | https://api.snov.io/v2/li-profiles-by-urls/result |
task_hash | ID de solicitud único que recibiste de la solicitud anterior. |
<?php function linkedInProfilesByUrlsResult() { $token = getAccessToken(); $task_hash = 'ef005a4f6d82e7e88384de7c72ee198d'; $headers = [ 'Authorization: Bearer ' . $token, ]; $options = [ CURLOPT_URL => 'https://api.snov.io/v2/li-profiles-by-urls/result?task_hash=$task_hash', CURLOPT_HTTPHEADER => $headers, CURLOPT_RETURNTRANSFER => true, CURLOPT_FOLLOWLOCATION => true ]; $ch = curl_init(); curl_setopt_array($ch, $options); $response = json_decode(curl_exec($ch), true); curl_close($ch); return $response; } ?>
def linkedin_profiles_by_urls_result(): token = get_access_token() task_hash = '879788bd889b0b9aa447278ce184e2ad' headers = {'authorization': f'Bearer {token}'} params = { 'task_hash': task_hash } res = requests.get(f'https://api.snov.io/v2/li-profiles-by-urls/result', params=params, headers=headers) return json.loads(res.text)
{
"status": "completed",
"data": [
{
"url": "https://www.linkedin.com/in/john-doe-32a416248/",
"result": {
"name": "John Doe",
"first_name": "John",
"last_name": "Doe",
"industry": "Internet",
"location": "Chicago, Illinois, United States",
"country": "United States",
"positions": [
{
"name": "Stealth Startup",
"title": "CEO",
"linkedin_url": "https://www.linkedin.com/company/18583501",
"url": "https://www.linkedin.com/in/ruhbirsingh/",
"industry": "Computer Software",
"country": "India",
"location": "Gurugram, Haryana, India"
},
{
"name": "TikTok",
"title": "Influencer",
"linkedin_url": "https://www.linkedin.com/company/33246798",
"url": "https://www.tiktok.com/about?lang=en",
"industry": "Entertainment",
"country": "United States",
"location": "Los Angeles, California, United States"
}
]
}
},
{
"url": "https://www.linkedin.com/in/john-doe-04bb56b1/",
"result": []
},
{
"url": "https://www.linkedin.com/in/john-jungwoo-do/",
"result": {
"name": "John Do",
"first_name": "John",
"last_name": "Do",
"location": "Vancouver, British Columbia, Canada",
"country": "Canada",
"skills": [
"communication",
"java"
],
"positions": [
{
"name": "UBC Electrical and Computer Engineering",
"title": "Undergraduate Research Assistant",
"linkedin_url": "https://www.linkedin.com/company/15134449",
"url": "http://www.ece.ubc.ca",
"industry": "Higher Education",
"country": "Canada",
"location": "Vancouver, British Columbia, Canada"
},
{
"name": "The University of British Columbia",
"title": "Undergraduate Teaching Assistant",
"linkedin_url": "https://www.linkedin.com/company/4373",
"url": "http://www.ubc.ca",
"industry": "Higher Education",
"country": "Canada",
"location": "Vancouver, British Columbia, Canada",
"specializations": [
"Aboriginal Engagement",
"Alumni Engagement",
"Community Engagement",
"Intercultural Understanding",
"International Engagement",
"Outstanding Work Environment",
"Research Excellence",
"Student Learning",
"sustainability"
]
}
]
}
},
{
"url": "https://www.linkedin.com/in/john-doe-474006162/",
"result": []
}
],
"meta": {
"urls": [
"https://www.linkedin.com/in/john-doe-32a416248/",
"https://www.linkedin.com/in/john-doe-04bb56b1/",
"https://www.linkedin.com/in/john-jungwoo-do/",
"https://www.linkedin.com/in/john-doe-474006162/"
],
"task_hash": "8a60c72133d0ea94767e4a978355c630"
}
}
status | Estado de la solicitud. Puede ser completed o in_progress. |
url | URL del perfil de LinkedIn. |
name | Nombre completo del prospecto. |
first_name | Nombre del prospecto. |
last_name | Apellido del prospecto. |
industry | Campo de trabajo del prospecto. |
location | Ubicación del prospecto. |
country | País donde se basa el prospecto, según su perfil de LinkedIn. |
skills | Habilidades del prospecto. |
positions | Array de roles laborales que ocupa actualmente el prospecto. |
name | El nombre de la empresa para la que trabaja el prospecto. |
title | Título del trabajo del prospecto. |
linkedin_url | Enlace a la página de LinkedIn de la empresa. |
url | Dirección del sitio web de la empresa. |
industry | Industria de la empresa. |
country | País donde se encuentran las oficinas centrales de la empresa. |
location | Ubicación de la empresa. |
specializations | Áreas de especialización o enfoque de la empresa. |
urls | 1 crédito por cada verificación |
task_hash | ID único para esta tarea de búsqueda. |
POSTEnriquecer el perfil de una persona a partir del correo
1 crédito por solicitudProporcionar una dirección de correo electrónico y Snov.io devolverá toda la información del perfil conectado al propietario de la dirección de correo electrónico proporcionada de la base de datos.
Si no encontramos información sobre el propietario del correo electrónico en nuestra base de datos, no se le cobrará por la solicitud.
| POST | https://api.snov.io/v1/get-profile-by-email |
email | La dirección de correo electrónico de la persona sobre la que desea encontrar información adicional. |
<?php function getProfileByEmail() { $token = getAccessToken(); $params = [ 'access_token' => $token, 'email' => 'gavin.vanrooyen@octagon.com' ]; $options = [ CURLOPT_URL => 'https://api.snov.io/v1/get-profile-by-email', CURLOPT_POST => true, CURLOPT_POSTFIELDS => $params, CURLOPT_RETURNTRANSFER => true, CURLOPT_FOLLOWLOCATION => true ]; $ch = curl_init(); curl_setopt_array($ch, $options); $res = json_decode(curl_exec($ch), true); curl_close($ch); return $res; } ?>
def get_profile_by_email(): token = get_access_token() params = {'access_token':token, 'email':'gavin.vanrooyen@octagon.com' } res = requests.post('https://api.snov.io/v1/get-profile-by-email', data=params) return json.loads(res.text)
{
"success": true,
"id": 301592,
"source": "linkedIn",
"name": "Lizi Hamer",
"firstName": "Lizi",
"lastName": "Hamer",
"logo": "https://app.snov.io/img/peoples/010fcf23c70dfa68d880545ec89a9215.jpg",
"industry": null,
"country": "Singapore",
"locality": "Singapore",
"social": [
{
"link": "https://www.linkedin.com/in/lizihamer/",
"type": "linkedIn"
},
{
"link": "https://twitter.com/LiziHamer",
"type": "twitter"
}
],
"currentJobs": [
{
"companyName": "Octagon",
"position": "Regional Creative Director",
"socialLink": "https://www.linkedin.com/company/165282",
"site": "www.octagon.com",
"locality": "Greater New York City Area",
"state": "Connecticut",
"city": "Stamford",
"street": "290 Harbor Dr",
"street2": "2nd Floor",
"postal": "06902",
"founded": "1983",
"startDate": "2016-01-31",
"endDate": null,
"size": "1-10",
"industry": "Marketing and Advertising",
"companyType": "Public Company",
"country": "United States"
},
{
"companyName": "SisuGirls",
"position": "Co Founder",
"socialLink": "https://www.linkedin.com/company/3841118",
"site": "http://www.sisugirls.org",
"locality": null,
"state": "SG",
"city": "Singapore",
"street": "33-03 Hong Leong Building",
"street2": null,
"postal": null,
"founded": "2014",
"startDate": "2015-07-31",
"endDate": null,
"size": "1-10",
"industry": "Health, Wellness and Fitness",
"companyType": null,
"country": "Singapore"
}
],
"previousJobs": [
{
"companyName": "Fusion Co-innovation Labs",
"position": "Creative Entrepreneur",
"socialLink": null,
"site": null,
"locality": null,
"state": null,
"city": null,
"street": null,
"street2": null,
"postal": null,
"founded": null,
"startDate": "2013-05-31",
"endDate": "2013-10-31",
"size": null,
"industry": null,
"companyType": null,
"country": null
},
{
"companyName": "Russell Commission",
"position": "Youth Advisory Board Member",
"socialLink": null,
"site": null,
"locality": null,
"state": null,
"city": null,
"street": null,
"street2": null,
"postal": null,
"founded": null,
"startDate": "2004-06-30",
"endDate": "2006-06-30",
"size": null,
"industry": null,
"companyType": null,
"country": null
}
],
"lastUpdateDate": "2018-02-07 10:12:28"
}id | Un identificador de perfil único. |
source | La fuente de los datos personales recuperados. |
name | El nombre completo del propietario de la dirección de correo electrónico. |
firstName | El nombre de la persona. |
lastName | El apellido de la persona. |
logo | La foto de perfil de la persona. |
industry | El sector de la persona indicado en la fuente. |
country | El país de la persona como se indica en la fuente. |
locality | La localidad de la persona como se indica en la fuente. |
social | Enlaces a los perfiles sociales de la persona. |
currentJobs | Una matriz que contiene información sobre el o los puestos de trabajo actuales de la persona. |
previousJobs | Una matriz que contiene información sobre los puestos de trabajo anteriores de la persona. |
lastUpdateDate | La fecha de la última actualización del perfil en la base de datos. |
POSTVerificador de email
Ingresa direcciones de email y Snov.io realizará una verificación completa. Puedes verificar hasta 10 emails al mismo tiempo.Proporcionando emails
| POST | https://api.snov.io/v2/email-verification/start |
emails[] | Emails que deseas verificar. Para verificar múltiples emails al mismo tiempo, agrega cada email como un parámetro separado. Por ejemplo: emails[] | help@snov.io emails[] | partnerships@snov.io Puedes verificar hasta 10 emails al mismo tiempo. |
webhook_url | Ingresa tu URL de webhook para recibir resultados de inmediato en lugar de usar una tarea de hash. |
<?php function emailVerificationStart() { $token = getAccessToken(); $params = [ 'emails' => ['gavin.vanrooyen@octagon.com','lizi.hamer@octagon.com','admin@snov.io','test@snov.io','ivalid_format_snov.io'], 'webhook_url' => 'https://hooks.yourdomain.com', ]; $headers = [ 'Authorization: Bearer ' . $token, ]; $options = [ CURLOPT_URL => 'https://api.snov.io/v2/email-verification/start', CURLOPT_HTTPHEADER => $headers, CURLOPT_RETURNTRANSFER => true, CURLOPT_POST => true, CURLOPT_POSTFIELDS => http_build_query($params), CURLOPT_FOLLOWLOCATION => true ]; $ch = curl_init(); curl_setopt_array($ch, $options); $response = json_decode(curl_exec($ch), true); curl_close($ch); return $response; } ?>
def email_verification_start(): token = get_access_token() headers = {'authorization': f'Bearer {token}'} params = { 'emails[]': ['gavin.vanrooyen@octagon.com', 'lizi.hamer@octagon.com', 'admin@snov.io', 'test@snov.io', 'ivalid_format_snov.io'], 'webhook_url': 'https://hooks.yourdomain.com', } res = requests.post('https://api.snov.io/v2/email-verification/start', params=params, headers=headers) return json.loads(res.text)
{
"data": {
"task_hash": "0110437df6811068197577a538849a4b"
},
"meta": {
"emails": [
"gavin.vanrooyen@octagon.com",
"lizi.hamer@octagon.com",
"admin@snov.io",
"test@snov.io",
"ivalid_format_snov.io"
]
}
}
task_hash | ID único para la tarea de búsqueda que iniciaste. |
emails | Un array de emails que proporcionaste para verificación. |
| GET | https://api.snov.io/v2/email-verification/result |
task_hash | ID de solicitud único que recibiste de la solicitud anterior. |
<?php function emailVerificationResult() { $token = getAccessToken(); $task_hash = '0110437df6811068197577a538849a4b'; $headers = [ 'Authorization: Bearer ' . $token, ]; $options = [ CURLOPT_URL => 'https://api.snov.io/v2/email-verification/result?task_hash=$task_hash', CURLOPT_HTTPHEADER => $headers, CURLOPT_RETURNTRANSFER => true, CURLOPT_FOLLOWLOCATION => true ]; $ch = curl_init(); curl_setopt_array($ch, $options); $response = json_decode(curl_exec($ch), true); curl_close($ch); return $response; } ?>
def email_verification_result(): token = get_access_token() task_hash = 'b55b28d5419a1c3ec310f21916e4e271' headers = {'authorization': f'Bearer {token}'} params = { 'task_hash': task_hash } res = requests.get(f'https://api.snov.io/v2/email-verification/result', params=params, headers=headers) return json.loads(res.text)
{
"status": "completed",
"data": [
{
"email": "gavin.vanrooyen@octagon.com",
"result": {
"is_webmail": false,
"smtp_status": "unknown",
"is_gibberish": false,
"is_disposable": false,
"is_valid_format": true,
"unknown_status_reason": "catchall"
}
},
{
"email": "admin@snov.io",
"result": {
"is_webmail": false,
"smtp_status": "valid",
"is_gibberish": false,
"is_disposable": false,
"is_valid_format": true
}
},
{
"email": "ivalid_format_snov.io",
"result": {
"is_webmail": false,
"smtp_status": "not_valid",
"is_gibberish": false,
"is_disposable": false,
"is_valid_format": false
}
},
{
"email": "lizi.hamer@octagon.com",
"result": {
"is_webmail": false,
"smtp_status": "unknown",
"is_gibberish": false,
"is_disposable": false,
"is_valid_format": true,
"unknown_status_reason": "catchall"
}
},
{
"email": "test@snov.io",
"result": {
"smtp_status": "unknown",
"is_valid_format": true,
"is_disposable": false,
"is_webmail": false,
"is_gibberish": true,
"unknown_status_reason": "banned"
}
}
],
"meta": {
"emails": [
"gavin.vanrooyen@octagon.com",
"lizi.hamer@octagon.com",
"admin@snov.io",
"test@snov.io",
"ivalid_format_snov.io"
],
"task_hash": "0110437df6811068197577a538849a4b"
}
}
status | Estado de la solicitud. Puede ser completed o in_progress. |
email | Dirección de email que estás verificando. |
smtp_status | Puede devolver valid, not_valid o unknown (también conocido como no verificable). Para ver la razón del estado desconocido, revisa el parámetro unknown_status_reason. |
is_valid_format | Muestra si el formato del email es válido. Puede ser false o true. |
is_disposable | Indica si un email es temporal o desechable, devolviendo false o true. |
is_webmail | Es true si el email que estás buscando es webmail. |
is_gibberish | Muestra si la dirección de email proporcionada tiene caracteres aleatorios o sin sentido. Será false o true. |
unknown_status_reason | Si un email verificado tiene un smtp_status desconocido, puedes encontrar una razón más detallada aquí. Banned: Alto riesgo de entregabilidad - este email no se pudo verificar con un 100% de certeza. Catchall: Riesgo de reputación del remitente - este email es un catch-all. Connection_error: Riesgo de rebote potencial - problemas técnicos del lado del destinatario. Greylist: Riesgo de entregabilidad - este servidor de email utiliza filtros de lista gris. Hidden_by_owner: El propietario del email o la empresa que posee el dominio solicitó su eliminación de los resultados de Snov.io. |
emails | Un array de emails que estás verificando. |
task_hash | ID de solicitud único para esta tarea de verificación. |
POSTAñadir nueva cuenta de correo electrónico
Este método conecta una nueva cuenta de correo electrónico SMTP/IMAP a tu espacio de trabajo de snov.io para que pueda usarse como remitente en las campañas. La cuenta se crea incluso si la comprobación de la conexión SMTP/IMAP aún no ha finalizado: el estado de la conexión se devuelve de forma asíncrona en los campos smtp.status / imap.status y puede consultarse posteriormente. Solo se admiten cuentas SMTP/IMAP (tipo de proveedor other); los flujos OAuth de Gmail y Microsoft quedan fuera del alcance.
| POST | https://api.snov.io/v2/sender-accounts/emails |
sender_name *Requerido | Nombre visible del remitente, máximo 100 caracteres. |
email_from *Requerido | Dirección de correo electrónico del remitente. |
password *Requerido | Contraseña o contraseña de aplicación para la cuenta SMTP/IMAP. Se almacena cifrada. |
smtp *Requerido | Objeto con la configuración de SMTP. |
smtp.host *Requerido | Host SMTP, p. ej. smtp.gmail.com. |
smtp.port *Requerido | Puerto SMTP. Valores permitidos: 25, 465, 587. |
smtp.encryption *Requerido | Tipo de cifrado. Valores permitidos: ssl, tls, none. Debe coincidir con el puerto: 465 → ssl, 587 → tls, 25 → none. |
imap | Objeto con la configuración de IMAP. Opcional, pero si se proporciona, todos los subcampos son obligatorios. |
imap.host | Host IMAP, p. ej. imap.gmail.com. Obligatorio cuando imap está presente. |
imap.port | Puerto IMAP. Valores permitidos: 143, 993. Obligatorio cuando imap está presente. |
imap.encryption | Tipo de cifrado. Valores permitidos: ssl, tls, none. Debe coincidir con el puerto: 993 → ssl o tls, 143 → none. Obligatorio cuando imap está presente. |
reply_to | Dirección de correo electrónico de respuesta (reply-to). |
limitation | Límite de envío diario. Entero, mín. 1, máx. 1200. Predeterminado: 50. No puede superar la cantidad máxima de correos electrónicos que la cuenta podría enviar en 24 horas según el retardo configurado. |
delay_type | Tipo de retardo entre correos electrónicos. Valores permitidos: fixed, random. Predeterminado: random. |
delay_fixed | Retardo fijo en segundos (se usa cuando delay_type=fixed). Entero, mín. 5, máx. 3600. Predeterminado: 600. |
delay_from | Retardo mínimo en segundos (se usa cuando delay_type=random). Entero, mín. 5, máx. 3600. Predeterminado: 600. |
delay_to | Retardo máximo en segundos (se usa cuando delay_type=random). Entero, mín. 5, máx. 3600, debe ser mayor que delay_from. Predeterminado: 900. |
signature | Firma HTML añadida a los correos electrónicos salientes. |
bcc_email | Dirección de correo electrónico para CCO (BCC). |
tags | Array de cadenas. Las etiquetas existentes se asocian por nombre, las nuevas se crean y se adjuntan a la cuenta. |
timezoneId | ID entero de la zona horaria de la cuenta. Mín. 1, máx. 458. |
<?php function createEmailAccount() { $token = getAccessToken(); $params = json_encode([ 'sender_name' => 'John Smith', 'email_from' => 'john@example.com', 'password' => 'app_password_here', 'smtp' => [ 'host' => 'smtp.gmail.com', 'port' => 465, 'encryption' => 'ssl' ], 'imap' => [ 'host' => 'imap.gmail.com', 'port' => 993, 'encryption' => 'ssl' ], 'limitation' => 50, 'delay_type' => 'random', 'delay_from' => 600, 'delay_to' => 900, 'reply_to' => 'replies@example.com', 'bcc_email' => 'bcc@example.com', 'tags' => ['Canada campaign 2025'] ]); $options = [ CURLOPT_URL => 'https://api.snov.io/v2/sender-accounts/emails', CURLOPT_POST => true, CURLOPT_POSTFIELDS => $params, CURLOPT_RETURNTRANSFER => true, CURLOPT_FOLLOWLOCATION => true, CURLOPT_HTTPHEADER => [ 'Authorization: Bearer ' . $token, 'Content-Type: application/json' ] ]; $ch = curl_init(); curl_setopt_array($ch, $options); $res = json_decode(curl_exec($ch), true); curl_close($ch); return $res; } ?>
def create_email_account(): token = get_access_token() headers = { 'Authorization': 'Bearer ' + token, 'Content-Type': 'application/json' } params = { 'sender_name': 'John Smith', 'email_from': 'john@example.com', 'password': 'app_password_here', 'smtp': { 'host': 'smtp.gmail.com', 'port': 465, 'encryption': 'ssl' }, 'imap': { 'host': 'imap.gmail.com', 'port': 993, 'encryption': 'ssl' }, 'limitation': 50, 'delay_type': 'random', 'delay_from': 600, 'delay_to': 900, 'reply_to': 'replies@example.com', 'bcc_email': 'bcc@example.com', 'tags': ['Canada campaign 2025'] } res = requests.post( 'https://api.snov.io/v2/sender-accounts/emails', headers=headers, json=params ) return json.loads(res.text)
{
"data": {
"id": 869852,
"sender_name": "John Smith",
"email_from": "john@example.com",
"smtp": {
"host": "smtp.gmail.com",
"port": 465,
"encryption": "ssl",
"status": "pending"
},
"imap": {
"host": "imap.gmail.com",
"port": 993,
"encryption": "ssl",
"status": "pending"
},
"limitation": 50,
"delay_type": "random",
"delay_from": 600,
"delay_to": 900,
"reply_to": "replies@example.com",
"bcc_email": "bcc@example.com",
"tags": ["Canada campaign 2025"],
"created_at": "2026-03-20T10:00:00+00:00"
}
}
data.id | ID de la cuenta de remitente creada. |
data.sender_name | Nombre visible del remitente. |
data.email_from | Dirección de correo electrónico del remitente. |
data.smtp | Configuración de SMTP: host, port, encryption, más un campo status con el resultado de la comprobación de la conexión (pending, connected, error). |
data.imap | Configuración de IMAP (solo presente si se configuró IMAP): host, port, encryption, status. |
data.limitation | Límite de envío diario. |
data.delay_type | Tipo de retardo: fixed o random. |
data.delay_from | Retardo mínimo en segundos (para delay_type=random). |
data.delay_to | Retardo máximo en segundos (para delay_type=random). |
data.delay_fixed | Retardo fijo en segundos (para delay_type=fixed). |
data.reply_to | Dirección de correo electrónico de respuesta (reply-to). |
data.signature | Firma HTML (solo presente si se proporciona). |
data.bcc_email | Dirección de correo electrónico para CCO (BCC). |
data.tags | Array de etiquetas adjuntas a la cuenta. |
data.timezoneId | ID de la zona horaria (solo presente si se estableció en la solicitud). |
data.created_at | Marca de tiempo de creación de la cuenta. |
PATCHActualizar cuenta de correo electrónico
Este método actualiza una cuenta de remitente SMTP/IMAP existente. Todos los campos son opcionales, pero debe proporcionarse al menos un campo válido: solo se modifican los campos suministrados, el resto permanece sin cambios. Cuando se incluye cualquier campo de SMTP o IMAP, se activa una nueva comprobación de conexión asíncrona y el estado resultante se devuelve en smtp.status / imap.status. Si se proporciona tags, el nuevo array reemplaza por completo la lista de etiquetas actual de la cuenta (reemplazo, no fusión).
| PATCH | https://api.snov.io/v2/sender-accounts/emails/{id} |
id *Requerido (path) | ID de la cuenta de remitente que se va a actualizar. |
sender_name | Nuevo nombre visible del remitente, máximo 100 caracteres. |
email_from | Nueva dirección de correo electrónico del remitente. |
password | Nueva contraseña o contraseña de aplicación para la cuenta SMTP/IMAP. Se almacena cifrada. |
smtp | Objeto con la nueva configuración de SMTP (host, port, encryption). Cuando smtp está presente, los tres subcampos son obligatorios y deben cumplir las reglas de emparejamiento puerto/cifrado (465 → ssl, 587 → tls, 25 → none). |
smtp.host | Host SMTP. Máximo 100 caracteres; formato: ^[a-zA-Z0-9][a-zA-Z0-9-.]*. Obligatorio cuando smtp está presente. |
smtp.port | Valores permitidos: 25, 465, 587. Obligatorio cuando smtp está presente. |
smtp.encryption | Debe coincidir con el puerto: 465 → ssl, 587 → tls, 25 → none. Obligatorio cuando smtp está presente. |
imap | Objeto con la nueva configuración de IMAP (host, port, encryption). Cuando imap está presente, los tres subcampos son obligatorios (993 → ssl o tls, 143 → none) |
imap.host | Host IMAP. Máximo 100 caracteres. Obligatorio cuando imap está presente. |
imap.port | Valores permitidos: 143, 993. Obligatorio cuando imap está presente. |
imap.encryption | Debe coincidir con el puerto: 993 → ssl o tls; 143 → none. Obligatorio cuando imap está presente. |
reply_to | Nueva dirección de correo electrónico de respuesta (reply-to). Pasa null para borrar. |
limitation | Nuevo límite de envío diario. Entero, mín. 1, máx. 1200. No puede superar la cantidad máxima de correos electrónicos que la cuenta podría enviar en 24 horas según el retardo configurado. |
delay_type | Nuevo tipo de retardo. Valores permitidos: fixed, random. |
delay_fixed | Retardo fijo en segundos (se usa cuando delay_type=fixed). Entero, mín. 5, máx. 3600. |
delay_from | Retardo mínimo en segundos (se usa cuando delay_type=random). Entero, mín. 5, máx. 3600. |
delay_to | Retardo máximo en segundos (se usa cuando delay_type=random). Entero, mín. 5, máx. 3600, debe ser mayor que delay_from. |
signature | Nueva firma HTML. Pasa null para borrar. |
bcc_email | Nueva dirección de correo electrónico para CCO (BCC). Pasa null para borrar. |
tags | Nuevo array de etiquetas. Reemplaza por completo la lista de etiquetas actual. Pasa null para borrar todas las etiquetas. |
timezoneId | ID entero de la zona horaria de la cuenta. Mín. 1, máx. 458. |
<?php function updateEmailAccount($accountId) { $token = getAccessToken(); $params = json_encode([ 'sender_name' => 'John Smith Updated', 'limitation' => 100, 'delay_type' => 'fixed', 'delay_fixed' => 600, 'tags' => ['Canada campaign 2025', 'Q2'] ]); $options = [ CURLOPT_URL => 'https://api.snov.io/v2/sender-accounts/emails/' . $accountId, CURLOPT_CUSTOMREQUEST => 'PATCH', CURLOPT_POSTFIELDS => $params, CURLOPT_RETURNTRANSFER => true, CURLOPT_FOLLOWLOCATION => true, CURLOPT_HTTPHEADER => [ 'Authorization: Bearer ' . $token, 'Content-Type: application/json' ] ]; $ch = curl_init(); curl_setopt_array($ch, $options); $res = json_decode(curl_exec($ch), true); curl_close($ch); return $res; } ?>
def update_email_account(account_id): token = get_access_token() headers = { 'Authorization': 'Bearer ' + token, 'Content-Type': 'application/json' } params = { 'sender_name': 'John Smith Updated', 'limitation': 100, 'delay_type': 'fixed', 'delay_fixed': 600, 'tags': ['Canada campaign 2025', 'Q2'] } res = requests.patch( f'https://api.snov.io/v2/sender-accounts/emails/{account_id}', headers=headers, json=params ) return json.loads(res.text)
{
"data": {
"id": 869852,
"sender_name": "John Smith Updated",
"email_from": "john@example.com",
"smtp": {
"host": "smtp.gmail.com",
"port": 465,
"encryption": "ssl",
"status": "pending"
},
"imap": {
"host": "imap.gmail.com",
"port": 993,
"encryption": "ssl",
"status": "pending"
},
"limitation": 100,
"delay_type": "fixed",
"delay_fixed": 600,
"reply_to": "replies@example.com",
"bcc_email": "bcc@example.com",
"tags": ["Canada campaign 2025", "Q2"],
"updated_at": "2026-04-22T11:04:37+00:00"
}
}
data.id | ID de la cuenta de remitente. |
data.sender_name | Nombre visible del remitente. |
data.email_from | Dirección de correo electrónico del remitente. |
data.smtp | Configuración de SMTP: host, port, encryption, más un campo status con el resultado de la comprobación de la conexión (pending, valid, invalid). |
data.imap | Configuración de IMAP (solo presente si IMAP está configurado): host, port, encryption, status. |
data.limitation | Límite de envío diario. |
data.delay_type | Tipo de retardo: fixed o random. |
data.delay_from | Retardo mínimo en segundos (para delay_type=random). |
data.delay_to | Retardo máximo en segundos (para delay_type=random). |
data.delay_fixed | Retardo fijo en segundos (para delay_type=fixed). |
data.reply_to | Dirección de correo electrónico de respuesta (reply-to). |
data.signature | Firma HTML (solo presente si se proporciona). |
data.bcc_email | Dirección de correo electrónico para CCO (BCC). |
data.tags | Array de etiquetas adjuntas a la cuenta. |
data.timezoneId | ID de la zona horaria (solo presente si se estableció). |
data.updated_at | Marca de tiempo de la última actualización. |
GETComprobar el estado SMTP/IMAP del remitente
Este método comprueba el estado de la conexión SMTP y (opcionalmente) IMAP de una cuenta de remitente de correo electrónico conectada. Úsalo para verificar si una cuenta de remitente es actualmente válida y operativa, y para recuperar cualquier error de conexión.
| GET | https://api.snov.io/v2/sender-accounts/check-sender-status |
sender_account_id *Requerido | ID de la cuenta de correo electrónico del remitente que se va a comprobar. Entero, valor mínimo: 1. |
<?php function checkSenderStatus($senderAccountId) { $token = getAccessToken(); $query = http_build_query([ 'sender_account_id' => $senderAccountId ]); $options = [ CURLOPT_URL => 'https://api.snov.io/v2/sender-accounts/check-sender-status?' . $query, CURLOPT_RETURNTRANSFER => true, CURLOPT_FOLLOWLOCATION => true, CURLOPT_HTTPHEADER => [ 'Authorization: Bearer ' . $token, 'Content-Type: application/json' ] ]; $ch = curl_init(); curl_setopt_array($ch, $options); $res = json_decode(curl_exec($ch), true); curl_close($ch); return $res; } ?>
def check_sender_status(sender_account_id): token = get_access_token() headers = { 'Authorization': 'Bearer ' + token, 'Content-Type': 'application/json' } params = { 'sender_account_id': sender_account_id } res = requests.get( 'https://api.snov.io/v2/sender-accounts/check-sender-status', headers=headers, params=params ) return json.loads(res.text)
{
"data": {
"smtp": {
"status": "valid"
},
"imap": {
"status": "valid"
}
}
}
{
"data": {
"smtp": {
"status": "invalid",
"errors": [
"Connection refused"
]
},
"imap": null
}
}
data | Un objeto con los detalles del estado de la conexión de la cuenta de remitente. |
smtp | Un objeto que describe el estado de la conexión SMTP: status (pending, valid, invalid) y errors (array de mensajes de error, presente cuando status es invalid). |
imap | Un objeto que describe el estado de la conexión IMAP con la misma estructura que smtp. Devuelve null cuando IMAP no se configuró durante la creación de la cuenta. |
GETObtener la lista de todas las cuentas de correo electrónico
GratisEste método muestra una lista de todas las cuentas de correo electrónico conectadas.
| GET | https://api.snov.io/v2/sender-accounts/emails |
| Este método no tiene parámetros de entrada. |
<?php function getSenderEmails() { $token = getAccessToken(); $options = [ CURLOPT_URL => 'https://api.snov.io/v2/sender-accounts/emails', CURLOPT_RETURNTRANSFER => true, CURLOPT_FOLLOWLOCATION => true, CURLOPT_HTTPHEADER => [ 'Authorization: Bearer ' . $token, 'Content-Type: application/json', ], ]; $ch = curl_init(); curl_setopt_array($ch, $options); $res = json_decode(curl_exec($ch), true); curl_close($ch); return $res; } ?>
def get_sender_emails(): token = get_access_token() headers = { 'Authorization': 'Bearer ' + token, 'Content-Type': 'application/json' } res = requests.get('https://api.snov.io/v2/sender-accounts/emails', headers=headers) return json.loads(res.text)
{
"data": [
{
"id": 11980,
"sender_name": "Den Johnson",
"email_from": "den.johnson@snov.io",
"valid": true,
"suspended": false,
"limitation": 50,
"provider": "hostinger",
"tags": [
"Den's account"
],
"imap": {
"username": "den.johnson@snov.io",
"valid": true
}
},
{
"id": 12355,
"sender_name": "Anna",
"email_from": "anna@snov.io",
"valid": false,
"suspended": false,
"limitation": 50,
"provider": "godaddy",
"tags": [
"Work"
],
"imap": {
"username": "anna@snov.io",
"valid": false
}
}
]
}
id | ID único de la cuenta de correo electrónico. |
sender_name | Nombre del remitente, o "From name". Es el nombre que se muestra en la bandeja de entrada del destinatario y que indica quién envió el correo. |
email_from | Dirección de correo electrónico completa. |
valid | Muestra true si la cuenta del remitente es válida. Devuelve false cuando no es válida. |
suspended | Muestra true si el envío desde la cuenta está suspendido. Devuelve false cuando la cuenta está operativa. |
limitation | Límites diarios de envío de la cuenta. |
provider | Proveedor de la cuenta de correo electrónico. |
tags | Etiquetas asignadas a la cuenta. |
imap | Un array con los detalles de IMAP de la cuenta. |
username | Correo de usuario seleccionado para recibir respuestas en lugar de la cuenta de correo predeterminada. |
valid | Muestra true cuando IMAP está habilitado. Devuelve false cuando IMAP está deshabilitado. |
POSTCrear campaña de calentamiento
Este método crea e inicia una nueva campaña de calentamiento para la cuenta de correo electrónico especificada. El calentamiento mejora gradualmente la reputación de envío de la cuenta intercambiando correos cortos con una red seleccionada de destinatarios. Elija la estrategia progressive para aumentar el volumen diario desde un punto de partida pequeño, o la estrategia steady para enviar un número fijo de correos de calentamiento por día; proporcione su propio subject y body o deje que snov.io los genere automáticamente.
| POST | https://api.snov.io/v2/warm-up |
email_account_id *Requerido | Integer. ID de la cuenta de correo electrónico a calentar. |
strategy | Estrategia de envío. Valores permitidos: progressive, steady. Valor predeterminado: progressive. |
per_day *Requerido | Integer. Objetivo de envío diario. Rango 1–1000 según el plan. |
from | Integer. Volumen diario inicial (solo estrategia progressive). Rango 1–5, debe ser ≤ per_day. Requerido cuando strategy=progressive. |
increase | Integer. Incremento diario de volumen (solo estrategia progressive). Rango 1–5. Requerido cuando strategy=progressive. |
email_content | Tipo de contenido del correo. Valores permitidos: autogenerated (generado por IA), specific (personalizado). Valor predeterminado: autogenerated. |
subject | String. Asunto del correo, 1–200 caracteres. Requerido cuando email_content=specific. |
body | String. Cuerpo del correo, 1–10000 caracteres. Requerido cuando email_content=specific. |
reply_rate | Integer. Porcentaje de correos de calentamiento recibidos que serán respondidos. Rango 10–45. Valor predeterminado: 30. |
campaign_deadline | String (YYYY-MM-DD). Fecha en que el calentamiento debe detenerse. Omita para sin fecha límite. |
providers | Array de strings. Proveedores de destinatarios objetivo. Valores permitidos: gmail, microsoft, aliyun, hostinger, private email, zoho, titan, godaddy, other. |
send_to_paid_domain | Boolean. Si se debe enviar a dominios de pago. Valor predeterminado: false. |
enable_ctd | Boolean. Activar dominio de seguimiento personalizado. Valor predeterminado: false. |
enable_proxy | Boolean. Activar proxy dinámico. Valor predeterminado: false. |
schedule_id | Integer. ID de un horario de envío a adjuntar al calentamiento. |
template_name | String. Nombre de una plantilla de correo guardada para usar. |
<?php function createWarmUp() { $token = getAccessToken(); $params = json_encode([ 'email_account_id' => 123, 'strategy' => 'progressive', 'per_day' => 50, 'from' => 2, 'increase' => 2, 'reply_rate' => 30, 'campaign_deadline' => '2026-12-31', 'send_to_paid_domain' => false, 'enable_proxy' => false ]); $options = [ CURLOPT_URL => 'https://api.snov.io/v2/warm-up', CURLOPT_POST => true, CURLOPT_POSTFIELDS => $params, CURLOPT_RETURNTRANSFER => true, CURLOPT_FOLLOWLOCATION => true, CURLOPT_HTTPHEADER => [ 'Authorization: Bearer ' . $token, 'Content-Type: application/json' ], ]; $ch = curl_init(); curl_setopt_array($ch, $options); $res = json_decode(curl_exec($ch), true); curl_close($ch); return $res; } ?>
def create_warm_up(): token = get_access_token() headers = { 'Authorization': 'Bearer ' + token, 'Content-Type': 'application/json' } params = { 'email_account_id': 123, 'strategy': 'progressive', 'per_day': 50, 'from': 2, 'increase': 2, 'reply_rate': 30, 'campaign_deadline': '2026-12-31', 'send_to_paid_domain': False, 'enable_proxy': False } res = requests.post( 'https://api.snov.io/v2/warm-up', headers=headers, json=params ) return json.loads(res.text)
{
"data": {
"id": 123
},
"success": true
}
success | Boolean. true cuando el calentamiento fue creado. |
data.id | ID de la campaña de calentamiento creada. |
GETObtener lista de campañas de calentamiento
Este método devuelve una lista paginada de todas las campañas de calentamiento en la cuenta, filtradas opcionalmente por estado. Cada elemento tiene la misma estructura que la respuesta de Obtener información de la campaña de calentamiento.
| GET | https://api.snov.io/v2/warm-up |
page | Integer. Número de página. Valor predeterminado: 1. Mínimo: 1. |
per_page | Integer. Número de resultados por página. Valores permitidos: 20, 50, 100. Valor predeterminado: 20. |
status | Filtrar por estado. Valores permitidos: active, paused, completed, error. Omita para devolver todos. |
<?php function getWarmUpList() { $token = getAccessToken(); $params = http_build_query([ 'page' => 1, 'per_page' => 20, 'status' => 'active' ]); $options = [ CURLOPT_URL => 'https://api.snov.io/v2/warm-up?' . $params, CURLOPT_RETURNTRANSFER => true, CURLOPT_FOLLOWLOCATION => true, CURLOPT_HTTPHEADER => [ 'Authorization: Bearer ' . $token, 'Content-Type: application/json' ], ]; $ch = curl_init(); curl_setopt_array($ch, $options); $res = json_decode(curl_exec($ch), true); curl_close($ch); return $res; } ?>
def get_warm_up_list(): token = get_access_token() headers = { 'Authorization': 'Bearer ' + token, 'Content-Type': 'application/json' } params = { 'page': 1, 'per_page': 20, 'status': 'active' } res = requests.get( 'https://api.snov.io/v2/warm-up', headers=headers, params=params ) return json.loads(res.text)
{
"data": [
{
"id": 1,
"status": "active",
"reply_rate": 30,
"send_to_paid_domain": false,
"start_date": "2026-03-26",
"campaign_deadline": "2026-12-21",
"strategy": "progressive",
"per_day": 2,
"from": 2,
"increase": 2,
"subject": null,
"body": null,
"template_name": null,
"enable_ctd": false,
"schedule": null,
"email_account": {
"id": 732745,
"email_from": "john@example.com",
"type": "microsoft",
"delay": 30,
"limit": 15,
"per_day": 50,
"schedule_required": false,
"provider": "gmail",
"custom_tracking_domain": null
},
"enable_proxy": false,
"sent_today": 2,
"daily_limit": 2,
"total_saved_from_spam": 5,
"deliverability": 88,
"warm_up_error": null
}
],
"success": true,
"meta": {
"total_items": 1,
"page": 1,
"per_page": 20,
"total_pages": 1
}
}
success | Boolean. true cuando la solicitud fue exitosa. |
data | Array de objetos de campaña de calentamiento. Cada elemento tiene la misma estructura que la respuesta de Obtener información de la campaña de calentamiento (ver campos data.* allí). |
meta.total_items | Número total de elementos en todas las páginas. |
meta.page | Número de página actual. |
meta.per_page | Número de elementos por página. |
meta.total_pages | Número total de páginas. |
GETObtener información de la campaña de calentamiento
Este método devuelve los detalles completos de una sola campaña de calentamiento por su ID — incluyendo configuración de estrategia, límites diarios, estadísticas actuales de entregabilidad y la cuenta de correo conectada.
| GET | https://api.snov.io/v2/warm-up/{id} |
id *Requerido(path) | Integer. ID de la campaña de calentamiento. |
<?php function getWarmUpById($warmUpId) { $token = getAccessToken(); $options = [ CURLOPT_URL => 'https://api.snov.io/v2/warm-up/' . $warmUpId, CURLOPT_RETURNTRANSFER => true, CURLOPT_FOLLOWLOCATION => true, CURLOPT_HTTPHEADER => [ 'Authorization: Bearer ' . $token, 'Content-Type: application/json' ], ]; $ch = curl_init(); curl_setopt_array($ch, $options); $res = json_decode(curl_exec($ch), true); curl_close($ch); return $res; } ?>
def get_warm_up_by_id(warm_up_id): token = get_access_token() headers = { 'Authorization': 'Bearer ' + token, 'Content-Type': 'application/json' } res = requests.get( f'https://api.snov.io/v2/warm-up/{warm_up_id}', headers=headers ) return json.loads(res.text)
{
"data": {
"id": 123,
"status": "active",
"reply_rate": 30,
"send_to_paid_domain": false,
"start_date": "2026-03-26",
"campaign_deadline": "2026-12-21",
"strategy": "progressive",
"per_day": 2,
"from": 2,
"increase": 2,
"subject": null,
"body": null,
"template_name": null,
"enable_ctd": false,
"schedule": null,
"email_account": {
"id": 732745,
"email_from": "john@example.com",
"type": "google",
"delay": 30,
"limit": 15,
"per_day": 50,
"schedule_required": false,
"provider": "gmail",
"custom_tracking_domain": null
},
"enable_proxy": false,
"sent_today": 2,
"daily_limit": 2,
"total_saved_from_spam": 106,
"deliverability": 88,
"warm_up_error": null
},
"success": true
}
success | Boolean. true cuando la solicitud fue exitosa. |
data.id | ID de la campaña de calentamiento. |
data.status | Estado de la campaña: active, pending, paused, completed, error. |
data.reply_rate | Porcentaje de correos recibidos que serán respondidos (10–45). |
data.send_to_paid_domain | Si la campaña envía a dominios de pago. |
data.start_date | Fecha de inicio de la campaña (YYYY-MM-DD). |
data.campaign_deadline | Fecha de finalización de la campaña (YYYY-MM-DD). null cuando no hay fecha límite. |
data.strategy | Estrategia de envío: progressive o steady. |
data.per_day | Objetivo de envío diario. |
data.from | Volumen diario inicial (solo estrategia progressive). |
data.increase | Incremento diario de volumen (solo estrategia progressive). |
data.subject | Asunto del correo (solo cuando email_content=specific). |
data.body | Cuerpo del correo (solo cuando email_content=specific). |
data.template_name | Nombre de la plantilla. |
data.enable_ctd | Si el dominio de seguimiento personalizado está activado. |
data.schedule | Horario de envío adjunto a la campaña, o null. |
data.enable_proxy | Si el proxy dinámico está activado. |
data.sent_today | Número de correos de calentamiento enviados hoy. |
data.daily_limit | Límite diario de envío actualmente aplicado. |
data.total_saved_from_spam | Número total de correos rescatados del spam desde que inició la campaña. |
data.deliverability | Tasa de entrega en la bandeja de entrada (%). |
data.warm_up_error | Descripción del error si el calentamiento entró en estado error, de lo contrario null. |
data.email_account | Detalles de la cuenta de correo conectada. |
data.email_account.id | ID de la cuenta de correo. |
data.email_account.email_from | Dirección de correo de la cuenta. |
data.email_account.type | Tipo de cuenta (ej. google, microsoft). |
data.email_account.delay | Retraso entre correos (segundos). |
data.email_account.limit | Límite total de correos para la cuenta. |
data.email_account.per_day | Límite diario para la cuenta. |
data.email_account.schedule_required | Si se requiere un horario para esta cuenta. |
data.email_account.provider | Proveedor de correo: gmail, microsoft, hostinger, zoho, titan, godaddy, other, etc. |
data.email_account.custom_tracking_domain | Dominio de seguimiento personalizado, o null. |
PATCHActualizar campaña de calentamiento
Este método actualiza parcialmente una campaña de calentamiento existente. Solo se cambian los campos que pase; el resto de la configuración permanece igual. Use este método para cambiar la configuración de la campaña en tiempo real, cambiar el estado (active, paused, completed, deleted), o eliminar la fecha límite enviando make_endless: true.
| PATCH | https://api.snov.io/v2/warm-up/{id} |
id *Requerido(path) | Integer. ID de la campaña de calentamiento a actualizar. |
status | Cambiar manualmente el estado de la campaña. Valores permitidos: active, paused, completed, deleted. |
strategy | Nueva estrategia de envío: progressive o steady. |
per_day | Nuevo objetivo de envío diario. Rango 1–1000 según el plan. |
from | Nuevo volumen diario inicial. Rango 1–10. Requerido cuando strategy=progressive. |
increase | Nuevo incremento diario de volumen. Rango 1–5. Requerido cuando strategy=progressive. |
email_content | Tipo de contenido del correo: autogenerated o specific. |
subject | Nuevo asunto del correo, 1–200 caracteres. Requerido cuando email_content=specific. |
body | Nuevo cuerpo del correo, 1–10000 caracteres. Requerido cuando email_content=specific. |
reply_rate | Nuevo porcentaje de tasa de respuesta. Rango 10–45. |
campaign_deadline | Nueva fecha de finalización de la campaña (YYYY-MM-DD). |
make_endless | Boolean. Pase true para eliminar el campaign_deadline actual y hacer la campaña sin fecha límite. |
providers | Nuevos proveedores de destinatarios objetivo (mismos valores permitidos que en Crear campaña de calentamiento). |
send_to_paid_domain | Boolean. |
enable_ctd | Boolean. Activar o desactivar el dominio de seguimiento personalizado. |
enable_proxy | Boolean. Activar o desactivar el proxy dinámico. |
schedule_id | Nuevo ID de horario de envío. |
template_name | Nuevo nombre de plantilla. |
<?php function updateWarmUp($warmUpId) { $token = getAccessToken(); $params = json_encode([ 'reply_rate' => 10, 'campaign_deadline' => '2027-06-30', 'enable_proxy' => true ]); $options = [ CURLOPT_URL => 'https://api.snov.io/v2/warm-up/' . $warmUpId, CURLOPT_CUSTOMREQUEST => 'PATCH', CURLOPT_POSTFIELDS => $params, CURLOPT_RETURNTRANSFER => true, CURLOPT_FOLLOWLOCATION => true, CURLOPT_HTTPHEADER => [ 'Authorization: Bearer ' . $token, 'Content-Type: application/json' ], ]; $ch = curl_init(); curl_setopt_array($ch, $options); $res = json_decode(curl_exec($ch), true); curl_close($ch); return $res; } ?>
def update_warm_up(warm_up_id): token = get_access_token() headers = { 'Authorization': 'Bearer ' + token, 'Content-Type': 'application/json' } params = { 'reply_rate': 10, 'campaign_deadline': '2027-06-30', 'enable_proxy': True } res = requests.patch( f'https://api.snov.io/v2/warm-up/{warm_up_id}', headers=headers, json=params ) return json.loads(res.text)
{
"data": {
"id": 123
},
"success": true
}
success | Boolean. true cuando el calentamiento fue actualizado. |
data.id | ID de la campaña de calentamiento actualizada. |
DELETEEliminar campaña de calentamiento
Este método elimina una campaña de calentamiento por su ID. Una vez eliminada, la campaña y sus estadísticas ya no son accesibles a través de otros métodos de la API de calentamiento.
| DELETE | https://api.snov.io/v2/warm-up/{id} |
id *Requerido(path) | Integer. ID de la campaña de calentamiento a eliminar. |
<?php function deleteWarmUp($warmUpId) { $token = getAccessToken(); $options = [ CURLOPT_URL => 'https://api.snov.io/v2/warm-up/' . $warmUpId, CURLOPT_CUSTOMREQUEST => 'DELETE', CURLOPT_RETURNTRANSFER => true, CURLOPT_FOLLOWLOCATION => true, CURLOPT_HTTPHEADER => [ 'Authorization: Bearer ' . $token, 'Content-Type: application/json' ], ]; $ch = curl_init(); curl_setopt_array($ch, $options); $res = json_decode(curl_exec($ch), true); curl_close($ch); return $res; } ?>
def delete_warm_up(warm_up_id): token = get_access_token() headers = { 'Authorization': 'Bearer ' + token, 'Content-Type': 'application/json' } res = requests.delete( f'https://api.snov.io/v2/warm-up/{warm_up_id}', headers=headers ) return json.loads(res.text)
{
"data": {
"id": 123
},
"success": true
}
success | Boolean. true cuando el calentamiento fue eliminado. |
data.id | ID de la campaña de calentamiento eliminada. |
GETObtener estadísticas de calentamiento
Este método devuelve estadísticas diarias y por proveedor de entregabilidad de una campaña de calentamiento — ya sea en una ventana predefinida (two_weeks / month) o un rango de fechas personalizado. Útil para monitorear el progreso de la tasa de bandeja de entrada y detectar proveedores donde el calentamiento tiene bajo rendimiento.
| GET | https://api.snov.io/v2/warm-up/statistics/{id} |
id *Requerido(path) | Integer. ID de la campaña de calentamiento. |
period | Período predefinido. Valores permitidos: two_weeks, month. Requerido cuando date_from / date_to no se proporcionan. |
date_from | String (YYYY-MM-DD). Inicio de un rango de fechas personalizado. Requerido cuando period no se proporciona. |
date_to | String (YYYY-MM-DD). Fin de un rango de fechas personalizado. Debe ser ≥ date_from y ≥ la fecha de inicio de la campaña. Requerido cuando period no se proporciona. |
<?php function getWarmUpStatistics($warmUpId) { $token = getAccessToken(); $params = http_build_query([ 'period' => 'two_weeks' ]); $options = [ CURLOPT_URL => 'https://api.snov.io/v2/warm-up/statistics/' . $warmUpId . '?' . $params, CURLOPT_RETURNTRANSFER => true, CURLOPT_FOLLOWLOCATION => true, CURLOPT_HTTPHEADER => [ 'Authorization: Bearer ' . $token, 'Content-Type: application/json' ], ]; $ch = curl_init(); curl_setopt_array($ch, $options); $res = json_decode(curl_exec($ch), true); curl_close($ch); return $res; } ?>
def get_warm_up_statistics(warm_up_id): token = get_access_token() headers = { 'Authorization': 'Bearer ' + token, 'Content-Type': 'application/json' } params = { 'period': 'two_weeks' } res = requests.get( f'https://api.snov.io/v2/warm-up/statistics/{warm_up_id}', headers=headers, params=params ) return json.loads(res.text)
{
"data": {
"daily_statistics": {
"2026-05-30": {
"emails_sent": 2,
"replies": 0,
"bounces": 0,
"spam_emails": 0,
"inbox_emails": 2,
"categories_emails": 0,
"scheduled": 0
},
"2026-05-31": {
"emails_sent": 2,
"replies": 0,
"bounces": 0,
"spam_emails": 0,
"inbox_emails": 2,
"categories_emails": 0,
"scheduled": 0
}
},
"provider_statistics": {
"google": {
"id": 1,
"count": 6,
"spam": 2,
"percent": 75,
"categories": 0
},
"outlook": {
"id": 2,
"count": 2,
"spam": 0,
"percent": 100
},
"hostinger": {
"id": 4,
"count": 2,
"spam": 0,
"percent": 100
},
"other": {
"id": 9,
"count": 4,
"spam": 0,
"percent": 100
}
},
"deliverability": {
"inbox": {
"count": 14,
"percent": 88
},
"spam": {
"count": 2,
"percent": 13
},
"categories": {
"count": 0,
"percent": 0
}
},
"is_calculated": false
},
"success": true
}
success | Boolean. true cuando la solicitud fue exitosa. |
data.daily_statistics | Objeto indexado por fecha (YYYY-MM-DD). Cada valor contiene los campos de estadísticas diarias a continuación. |
data.daily_statistics.{date}.emails_sent | Número de correos de calentamiento enviados ese día. |
data.daily_statistics.{date}.replies | Número de respuestas recibidas ese día. |
data.daily_statistics.{date}.bounces | Número de correos rebotados ese día. |
data.daily_statistics.{date}.spam_emails | Número de correos que fueron al spam ese día. |
data.daily_statistics.{date}.inbox_emails | Número de correos que llegaron a la bandeja de entrada ese día. |
data.daily_statistics.{date}.categories_emails | Número de correos que fueron a pestañas de categorías de Gmail ese día. |
data.daily_statistics.{date}.scheduled | Número de correos programados para envío ese día. |
data.provider_statistics | Objeto indexado por nombre de proveedor (google, outlook, hostinger, etc.). Cada valor contiene los campos de estadísticas por proveedor a continuación. |
data.provider_statistics.{provider}.id | ID interno del proveedor. |
data.provider_statistics.{provider}.count | Número de correos enviados a través de este proveedor. |
data.provider_statistics.{provider}.spam | Número de correos que fueron al spam en este proveedor. |
data.provider_statistics.{provider}.percent | Tasa de entrega en la bandeja de entrada (%) para este proveedor. |
data.provider_statistics.{provider}.categories | Número de correos que fueron a pestañas de categorías de Gmail. Puede omitirse para proveedores sin soporte de categorías. |
data.deliverability.inbox.count | Número total de correos entregados en la bandeja de entrada. |
data.deliverability.inbox.percent | Tasa de entrega en la bandeja de entrada (%). |
data.deliverability.spam.count | Número total de correos entregados en spam. |
data.deliverability.spam.percent | Tasa de spam (%). |
data.deliverability.categories.count | Número total de correos entregados en pestañas de categorías de Gmail. |
data.deliverability.categories.percent | Tasa de categorías (%). |
data.is_calculated | Boolean. false cuando las estadísticas aún se están procesando; true cuando el cálculo está completo. |
Gestión de campañas
Estos métodos le permiten crear, configurar y controlar el ciclo de vida completo de una campaña, desde la configuración inicial hasta el lanzamiento, la pausa, la finalización y la eliminación.
GETVer todas las campañas
GratisEste método muestra una lista de todas las campañas del usuario. Si el usuario forma parte de un equipo y tiene permiso para ver los registros del mismo, el método también devolverá todas las campañas creadas dentro de ese equipo.
| GET | https://api.snov.io/v1/get-user-campaigns |
| No hay parámetros de entrada para este método |
<?php function userCampaigns() { $token = getAccessToken(); $params = [ 'access_token' => $token ]; $params = http_build_query($params); $options = [ CURLOPT_URL => 'https://api.snov.io/v1/get-user-campaigns?'.$params, CURLOPT_RETURNTRANSFER => true, CURLOPT_FOLLOWLOCATION => true, ]; $ch = curl_init(); curl_setopt_array($ch, $options); $res = json_decode(curl_exec($ch), true); curl_close($ch); return $res; } ?>
def user_lists(): token = get_access_token() headers = {'Authorization': token} url = 'https://api.snov.io/v1/get-user-campaigns' response = requests.request('GET', url, headers=headers) return json.loads(res.text)
[
{
"id": 237945,
"campaign": "New Campaign",
"list_id": 8512947,
"status": "Paused",
"created_at": 1639469976,
"updated_at": 1639470026,
"started_at": 1639470021,
"hash": "e272be8f9a6894f5b5894fe2ef77095e"
},
{
"id": 237956,
"campaign": "Test campaign",
"list_id": 7654321,
"status": "Draft",
"created_at": 1638808262,
"updated_at": 1638808262,
"started_at": null,
"hash": "f97fce248b77e9a1ae770b21c7bd783d"
}
]
id | Identificador único de la campaña del usuario. |
campaign | Nombre de la campaña. |
list_id | Identificador único de la lista de prospectos utilizada en la campaña. |
status | Estado de la campaña. |
created_at | Fecha y hora de creación de la campaña en el formato de Unix Timestamp. |
updated_at | Fecha y hora de la última actualización de la campaña en formato Unix Timestamp. |
started_at | Fecha y hora de lanzamiento de la campaña en el formato de Unix Timestamp. |
POSTCrear campaña
Este método crea una nueva campaña de outreach en tu espacio de trabajo de snov.io. La campaña se crea con el estado new y puede guardarse en cualquier estado parcialmente configurado — solo se validan como obligatorios los campos necesarios para una campaña ejecutable, el resto puede completarse después. Se admiten secuencias solo de email, solo de LinkedIn y mixtas multicanal, incluyendo variantes A/B, desencadenantes (apertura, clic, respuesta, calendly, nivel de conexión, envío de in-mail de LinkedIn, etc.), retrasos y bloques de objetivo. Este método crea una campaña sin contenido en sus bloques de mensajes. El contenido se añade después llamando al método Create Email Step Content.
| POST | https://api.snov.io/v2/campaigns/create |
title *Requerido | String. Nombre de visualización de la campaña. Máximo 255 caracteres. |
priority *Requerido | String enum. Prioridad de envío de la campaña: low, medium, high. |
email_accounts *Obligatorio para campañas de email | Array of integers. IDs de las cuentas de envío de email a utilizar. |
linkedin_accounts | Array of integers. IDs de las cuentas de LinkedIn a utilizar. |
tracking *Obligatorio para campañas de email | Object. Configuración de seguimiento de email. |
tracking.open | Boolean. Rastrear aperturas de email. |
tracking.link_click | Boolean. Rastrear clics en enlaces en los emails. |
sending_settings *Obligatorio para campañas de email | Object. Controla cómo se envían los emails y qué destinatarios se omiten. |
sending_settings.sending_priority | String enum. Qué emails van primero: first_email o follow_up. |
sending_settings.daily_sending_all | Integer o null. Máximo total de emails enviados por día entre todos los destinatarios. |
sending_settings.daily_sending_new_recipients | Integer o null. Máximo de nuevos destinatarios contactados por día. |
sending_settings.skip_unverifiable | Boolean. Omitir destinatarios cuyo email no puede verificarse. |
sending_settings.skip_unverified | Boolean. Omitir destinatarios con emails no verificados. |
sending_settings.skip_who_replied | Detener el seguimiento de los prospectos que respondan. |
sending_settings.skip_company_domain_who_replied | Boolean. Omitir destinatarios de un dominio de empresa donde alguien respondió. |
sending_settings.skip_recipients_without_variables_data | Boolean. Omitir destinatarios sin valores de variables personalizadas. |
sending_settings.skip_other_recipients_email_addresses | Boolean. Si el prospecto tiene varias direcciones de correo, enviar solo al primero si el valor es true. |
sending_settings.skip_recipients_added_to_my_another_campaign | Boolean. Omitir destinatarios ya añadidos a otra campaña de este usuario. |
sending_settings.skip_recipients_added_to_team_another_campaign | Boolean. Omitir destinatarios ya añadidos a otra campaña de cualquier miembro del equipo. |
sending_settings.one_click_unsubscribe | Boolean. Habilitar encabezado de cancelación de suscripción con un clic en los emails. |
recipients *Requerido | Object. Define quién recibe la campaña. |
recipients.list_id *Requerido | Integer. ID de la lista de prospectos a la que enviar. |
recipients.black_list_id | Integer. ID de la lista de no envío. Consulte Ver todas las listas de "No enviar email". |
schedule_id | Integer. ID del horario de envío. Consulte Ver todas las programaciones. |
start_campaign_at | String (YYYY-MM-DD HH:MM:SS) o null. Fecha y hora de inicio automático de la campaña, ej. 2027-03-25 09:00:00. |
complete_campaign_at | String (YYYY-MM-DD HH:MM:SS) o null. Fecha y hora de parada automática de la campaña. |
timezone | String. Zona horaria de la campaña. Para la lista de zonas horarias admitidas, consulte la tabla Zonas Horarias a continuación. |
complete_campaign_after_last_step *Requerido | Boolean. Detener la campaña cuando todos los destinatarios hayan pasado el último paso de la secuencia. |
archive_in_months *Requerido | Integer. Archivar automáticamente la campaña después de este número de meses. Valores permitidos: 1, 2, 3, 6. |
provider_matching *Obligatorio para campañas de email | Boolean. Hacer coincidir el proveedor de email del destinatario con el proveedor de la cuenta remitente cuando sea posible. Solo puede ser true cuando al menos dos cuentas de email están conectadas. |
deals | Object o null. Configuración de creación de negocios CRM activada por eventos de la campaña. |
deals.event *Obligatorio cuando se proporciona deals | Array of strings. Eventos que crean un negocio: open, click, reply. |
deals.pipeline_id *Obligatorio cuando se proporciona deals | Integer. ID del pipeline de CRM para crear el negocio. |
deals.stage_id *Obligatorio cuando se proporciona deals | Integer. ID de la etapa del pipeline donde colocar el negocio. |
deals.potential_value | Integer. Valor estimado del negocio. |
deals.currency | String. Código de moneda para el valor del trato. Para la lista de monedas admitidas, consulte la tabla Divisas a continuación. |
sequence *Requerido | Object. El flujo de automatización de pasos que ejecuta la campaña. |
sequence.entry *Requerido | String. _ref del primer paso a ejecutar. |
sequence.steps *Requerido | Array of objects. Lista ordenada de todos los pasos de la secuencia. |
sequence.steps._ref *Requerido | String. Identificador único de este paso, usado para vincular pasos mediante next / yes / no. |
sequence.steps.type *Requerido | String enum. Tipo de paso: email, delay, trigger, goal, linkedin. |
sequence.steps.next | String o null. _ref del paso al que proceder después de este (bloques lineales: email, linkedin, delay). |
sequence.steps.yes | String. _ref del paso al que ir cuando se cumple la condición del desencadenante (solo trigger). |
sequence.steps.no | String. _ref del paso al que ir cuando no se cumple la condición del desencadenante (solo trigger). |
sequence.steps.waiting_type *Obligatorio para delay / trigger | String enum. Unidad de tiempo para el período de espera: minutes, hours, days. |
sequence.steps.waiting_val *Obligatorio para delay / trigger | Integer. Número de unidades de tiempo a esperar. Límites por unidad: minutes ≤ 43200, hours ≤ 720, days ≤ 30. |
sequence.steps.action *Obligatorio para linkedin / trigger | String enum. La acción a realizar o el evento a observar. Ver valores admitidos a continuación. |
sequence.steps.goal_name *Obligatorio para goal | String. Etiqueta para este paso de objetivo, ej. Replied, Connected. Un bloque goal debe ser el último paso en su rama — no puede tener un next y no puede ser el primer paso de la secuencia. |
sequence.steps.content_slots *Obligatorio para email | Integer (mín. 1, máx. 15). Número de variantes A/B de contenido para este paso de email. |
sequence.steps.subject | String o null. Línea de asunto del email (solo email); admite {{variables}}. Obligatorio para el paso linkedin con action=in_mail. |
sequence.steps.body *Obligatorio para invite / message / in_mail | String (HTML). Cuerpo del mensaje para acciones de LinkedIn que envían texto. No puede estar vacío. |
sequence.steps.value *Obligatorio para endorse_skills | Integer (1–5) para endorse_skills. Array de 1–2 enteros únicos de [1, 2, 3] para check_connection_level. |
| Tipo de paso | Valor de action | Descripción |
|---|---|---|
linkedin | visit | Visitar el perfil del prospecto en LinkedIn. |
linkedin | like | Dar like a una publicación en el perfil del prospecto. |
linkedin | follow | Seguir al prospecto en LinkedIn. |
linkedin | invite | Enviar una solicitud de conexión (requiere body). |
linkedin | message | Enviar un mensaje directo de LinkedIn (requiere body). |
linkedin | in_mail | Enviar un LinkedIn InMail (requiere body y subject). |
linkedin | connected_on_linkedin | Comprobar si el prospecto ha aceptado la solicitud de conexión en LinkedIn. |
linkedin | check_connection_level | Comprobar el nivel de conexión del prospecto. |
linkedin | endorse_skills | Avalar habilidades en el perfil del prospecto (requiere value 1–5). |
trigger | open | Esperar para ver si el prospecto abre un email. |
trigger | click | Esperar para ver si el prospecto hace clic en un enlace del email. |
trigger | calendly | Esperar para ver si el prospecto reserva a través de Calendly. |
trigger | connected_on_linkedin | Disparador de sistema. Obligatorio después de un paso connected_on_linkedin de LinkedIn. El campo next del paso connected_on_linkedin debe apuntar a este disparador. |
trigger | check_connection_level | Ramificar según el grado de conexión del prospecto en LinkedIn. |
trigger | linkedin_in_mail_sent | Disparador de sistema. Obligatorio después de un paso in_mail de LinkedIn. El campo next del paso in_mail debe apuntar a este disparador. |
| id | zone | zone_time |
|---|---|---|
| 1 | Pacific/Midway | -11:00 |
| 2 | US/Samoa | -11:00 |
| 3 | US/Hawaii | -10:00 |
| 4 | US/Alaska | -09:00 |
| 5 | America/Los Angeles | -08:00 |
| 6 | America/Tijuana | -08:00 |
| 7 | PST8PDT | -08:00 |
| 8 | America/Chihuahua | -07:00 |
| 9 | America/Mazatlan | -07:00 |
| 10 | Canada/Mountain | -07:00 |
| 11 | US/Arizona | -07:00 |
| 12 | US/Mountain | -07:00 |
| 13 | Canada/Saskatchewan | -06:00 |
| 14 | America/Mexico City | -06:00 |
| 15 | America/Monterrey | -06:00 |
| 16 | US/Central | -06:00 |
| 17 | America/Bogota | -05:00 |
| 18 | America/Lima | -05:00 |
| 19 | America/Chicago | -06:00 |
| 20 | America/Toronto | -05:00 |
| 21 | America/New York | -05:00 |
| 22 | Canada/Eastern | -05:00 |
| 23 | US/East-Indiana | -05:00 |
| 24 | US/Eastern | -05:00 |
| 25 | America/La Paz | -04:00 |
| 26 | America/Santiago | -03:00 |
| 27 | Canada/Atlantic | -04:00 |
| 28 | America/Buenos Aires | -03:00 |
| 29 | America/Sao Paulo | -03:00 |
| 30 | America/Montevideo | -03:00 |
| 31 | Canada/Newfoundland | -03:30 |
| 32 | Atlantic/South Georgia | -02:00 |
| 33 | Atlantic/Cape Verde | -01:00 |
| 34 | Atlantic/Azores | -01:00 |
| 35 | Africa/Monrovia | +00:00 |
| 36 | UTC | +00:00 |
| 37 | Africa/Casablanca | +00:00 |
| 38 | Europe/Dublin | +00:00 |
| 39 | Europe/Lisbon | +00:00 |
| 40 | Europe/London | +00:00 |
| 41 | Europe/Amsterdam | +01:00 |
| 42 | Europe/Belgrade | +01:00 |
| 43 | Europe/Berlin | +01:00 |
| 44 | Europe/Bratislava | +01:00 |
| 45 | Europe/Brussels | +01:00 |
| 46 | Europe/Budapest | +01:00 |
| 47 | Europe/Copenhagen | +01:00 |
| 48 | Europe/Ljubljana | +01:00 |
| 49 | Europe/Madrid | +01:00 |
| 50 | Europe/Paris | +01:00 |
| 51 | Europe/Prague | +01:00 |
| 52 | Europe/Rome | +01:00 |
| 53 | Europe/Sarajevo | +01:00 |
| 54 | Europe/Skopje | +01:00 |
| 55 | Europe/Stockholm | +01:00 |
| 56 | Europe/Vienna | +01:00 |
| 57 | Europe/Warsaw | +01:00 |
| 58 | Europe/Zagreb | +01:00 |
| 59 | Africa/Cairo | +02:00 |
| 60 | Africa/Harare | +02:00 |
| 61 | Asia/Jerusalem | +02:00 |
| 62 | Europe/Athens | +02:00 |
| 63 | Europe/Bucharest | +02:00 |
| 64 | Europe/Helsinki | +02:00 |
| 65 | Europe/Istanbul | +03:00 |
| 66 | Europe/Kyiv | +02:00 |
| 67 | Europe/Riga | +02:00 |
| 68 | Europe/Sofia | +02:00 |
| 69 | Europe/Tallinn | +02:00 |
| 70 | Europe/Vilnius | +02:00 |
| 71 | Africa/Nairobi | +03:00 |
| 72 | Asia/Baghdad | +03:00 |
| 73 | Asia/Kuwait | +03:00 |
| 74 | Asia/Riyadh | +03:00 |
| 75 | Europe/Minsk | +03:00 |
| 76 | Europe/Moscow | +03:00 |
| 77 | Europe/Volgograd | +03:00 |
| 78 | Asia/Baku | +04:00 |
| 79 | Asia/Dubai | +04:00 |
| 80 | Asia/Muscat | +04:00 |
| 81 | Asia/Tbilisi | +04:00 |
| 82 | Asia/Yerevan | +04:00 |
| 83 | Asia/Kabul | +04:30 |
| 84 | Asia/Karachi | +05:00 |
| 85 | Asia/Tashkent | +05:00 |
| 86 | Asia/Calcutta | +05:30 |
| 87 | Asia/Kolkata | +05:30 |
| 88 | Asia/Kathmandu | +05:45 |
| 89 | Asia/Almaty | +06:00 |
| 90 | Asia/Dhaka | +06:00 |
| 91 | Asia/Urumqi | +06:00 |
| 92 | Asia/Rangoon | +06:30 |
| 93 | Asia/Bangkok | +07:00 |
| 94 | Asia/Jakarta | +07:00 |
| 95 | Asia/Novosibirsk | +07:00 |
| 96 | Asia/Krasnoyarsk | +07:00 |
| 97 | Asia/Shanghai | +08:00 |
| 98 | Asia/Hong Kong | +08:00 |
| 99 | Asia/Chongqing | +08:00 |
| 100 | Asia/Kuala Lumpur | +08:00 |
| 101 | Asia/Taipei | +08:00 |
| 102 | Asia/Ulan Bator | +08:00 |
| 103 | Australia/Perth | +08:00 |
| 104 | Hongkong | +08:00 |
| 105 | Singapore | +08:00 |
| 106 | Asia/Irkutsk | +08:00 |
| 107 | Asia/Seoul | +09:00 |
| 108 | Asia/Tokyo | +09:00 |
| 109 | Asia/Yakutsk | +09:00 |
| 110 | Australia/Adelaide | +10:30 |
| 111 | Australia/Darwin | +09:30 |
| 112 | Australia/Brisbane | +10:00 |
| 113 | Australia/Canberra | +11:00 |
| 114 | Australia/Hobart | +11:00 |
| 115 | Australia/Melbourne | +11:00 |
| 116 | Australia/Sydney | +11:00 |
| 117 | Pacific/Guam | +10:00 |
| 118 | Pacific/Port Moresby | +10:00 |
| 119 | Asia/Vladivostok | +10:00 |
| 120 | Asia/Magadan | +11:00 |
| 121 | Asia/Kamchatka | +12:00 |
| 122 | Pacific/Auckland | +13:00 |
| 123 | Pacific/Fiji | +12:00 |
| 124 | Pacific/Wallis | +12:00 |
| 125 | Pacific/Tongatapu | +13:00 |
| 126 | Pacific/Kiritimati | +14:00 |
| 127 | Africa/Abidjan | +00:00 |
| 128 | Africa/Accra | +00:00 |
| 129 | Africa/Addis Ababa | +03:00 |
| 130 | Africa/Algiers | +01:00 |
| 131 | Africa/Asmara | +03:00 |
| 132 | Africa/Bamako | +00:00 |
| 133 | Africa/Bangui | +01:00 |
| 134 | Africa/Banjul | +00:00 |
| 135 | Africa/Bissau | +00:00 |
| 136 | Africa/Blantyre | +02:00 |
| 137 | Africa/Brazzaville | +01:00 |
| 138 | Africa/Bujumbura | +02:00 |
| 139 | Africa/Ceuta | +02:00 |
| 140 | Africa/Conakry | +00:00 |
| 141 | Africa/Dakar | +00:00 |
| 142 | Africa/Dar es Salaam | +03:00 |
| 143 | Africa/Djibouti | +03:00 |
| 144 | Africa/Douala | +01:00 |
| 145 | Africa/El Aaiun | +01:00 |
| 146 | Africa/Freetown | +00:00 |
| 147 | Africa/Gaborone | +02:00 |
| 148 | Africa/Johannesburg | +02:00 |
| 149 | Africa/Juba | +03:00 |
| 150 | Africa/Kampala | +03:00 |
| 151 | Africa/Khartoum | +02:00 |
| 152 | Africa/Kigali | +02:00 |
| 153 | Africa/Kinshasa | +01:00 |
| 154 | Africa/Lagos | +01:00 |
| 155 | Africa/Libreville | +01:00 |
| 156 | Africa/Lome | +00:00 |
| 157 | Africa/Luanda | +01:00 |
| 158 | Africa/Lubumbashi | +02:00 |
| 159 | Africa/Lusaka | +02:00 |
| 160 | Africa/Malabo | +01:00 |
| 161 | Africa/Maputo | +02:00 |
| 162 | Africa/Maseru | +02:00 |
| 163 | Africa/Mbabane | +02:00 |
| 164 | Africa/Mogadishu | +03:00 |
| 165 | Africa/Ndjamena | +01:00 |
| 166 | Africa/Niamey | +01:00 |
| 167 | Africa/Nouakchott | +00:00 |
| 168 | Africa/Ouagadougou | +00:00 |
| 169 | Africa/Porto-Novo | +01:00 |
| 170 | Africa/Sao Tome | +00:00 |
| 171 | Africa/Tripoli | +02:00 |
| 172 | Africa/Tunis | +01:00 |
| 173 | Africa/Windhoek | +02:00 |
| 174 | America/Adak | -09:00 |
| 175 | America/Anchorage | -08:00 |
| 176 | America/Anguilla | -04:00 |
| 177 | America/Antigua | -04:00 |
| 178 | America/Araguaina | -03:00 |
| 179 | America/Argentina/Buenos Aires | -03:00 |
| 180 | America/Argentina/Catamarca | -03:00 |
| 181 | America/Argentina/Cordoba | -03:00 |
| 182 | America/Argentina/Jujuy | -03:00 |
| 183 | America/Argentina/La Rioja | -03:00 |
| 184 | America/Argentina/Mendoza | -03:00 |
| 185 | America/Argentina/Rio Gallegos | -03:00 |
| 186 | America/Argentina/Salta | -03:00 |
| 187 | America/Argentina/San Juan | -03:00 |
| 188 | America/Argentina/San Luis | -03:00 |
| 189 | America/Argentina/Tucuman | -03:00 |
| 190 | America/Argentina/Ushuaia | -03:00 |
| 191 | America/Aruba | -04:00 |
| 192 | America/Asuncion | -04:00 |
| 193 | America/Atikokan | -05:00 |
| 194 | America/Bahia | -03:00 |
| 195 | America/Bahia Banderas | -05:00 |
| 196 | America/Barbados | -04:00 |
| 197 | America/Belem | -03:00 |
| 198 | America/Belize | -06:00 |
| 199 | America/Blanc-Sablon | -04:00 |
| 200 | America/Boa Vista | -04:00 |
| 201 | America/Boise | -06:00 |
| 202 | America/Cambridge Bay | -06:00 |
| 203 | America/Campo Grande | -04:00 |
| 204 | America/Cancun | -05:00 |
| 205 | America/Caracas | -04:00 |
| 206 | America/Cayenne | -03:00 |
| 207 | America/Cayman | -05:00 |
| 208 | America/Costa Rica | -06:00 |
| 209 | America/Creston | -07:00 |
| 210 | America/Cuiaba | -04:00 |
| 211 | America/Curacao | -04:00 |
| 212 | America/Danmarkshavn | +00:00 |
| 213 | America/Dawson | -07:00 |
| 214 | America/Dawson Creek | -07:00 |
| 215 | America/Denver | -06:00 |
| 216 | America/Detroit | -04:00 |
| 217 | America/Dominica | -04:00 |
| 218 | America/Edmonton | -06:00 |
| 219 | America/Eirunepe | -05:00 |
| 220 | America/El Salvador | -06:00 |
| 221 | America/Fort Nelson | -07:00 |
| 222 | America/Fortaleza | -03:00 |
| 223 | America/Glace Bay | -03:00 |
| 224 | America/Godthab | -02:00 |
| 225 | America/Goose Bay | -03:00 |
| 226 | America/Grand Turk | -04:00 |
| 227 | America/Grenada | -04:00 |
| 228 | America/Guadeloupe | -04:00 |
| 229 | America/Guatemala | -06:00 |
| 230 | America/Guayaquil | -05:00 |
| 231 | America/Guyana | -04:00 |
| 232 | America/Halifax | -03:00 |
| 233 | America/Havana | -04:00 |
| 234 | America/Hermosillo | -07:00 |
| 235 | America/Indiana/Indianapolis | -04:00 |
| 236 | America/Indiana/Knox | -05:00 |
| 237 | America/Indiana/Marengo | -04:00 |
| 238 | America/Indiana/Petersburg | -04:00 |
| 239 | America/Indiana/Tell City | -05:00 |
| 240 | America/Indiana/Vevay | -04:00 |
| 241 | America/Indiana/Vincennes | -04:00 |
| 242 | America/Indiana/Winamac | -04:00 |
| 243 | America/Inuvik | -06:00 |
| 244 | America/Iqaluit | -04:00 |
| 245 | America/Jamaica | -05:00 |
| 246 | America/Juneau | -08:00 |
| 247 | America/Kentucky/Louisville | -04:00 |
| 248 | America/Kentucky/Monticello | -04:00 |
| 249 | America/Kralendijk | -04:00 |
| 252 | America/Lower Princes | -04:00 |
| 253 | America/Maceio | -03:00 |
| 254 | America/Managua | -06:00 |
| 255 | America/Manaus | -04:00 |
| 256 | America/Marigot | -04:00 |
| 257 | America/Martinique | -04:00 |
| 258 | America/Matamoros | -05:00 |
| 259 | America/Menominee | -05:00 |
| 260 | America/Merida | -05:00 |
| 261 | America/Metlakatla | -08:00 |
| 263 | America/Miquelon | -02:00 |
| 264 | America/Moncton | -03:00 |
| 265 | America/Montserrat | -04:00 |
| 266 | America/Nassau | -04:00 |
| 268 | America/Nipigon | -04:00 |
| 269 | America/Nome | -08:00 |
| 270 | America/Noronha | -02:00 |
| 271 | America/North Dakota/Beulah | -05:00 |
| 272 | America/North Dakota/Center | -05:00 |
| 273 | America/North Dakota/New Salem | -05:00 |
| 274 | America/Ojinaga | -06:00 |
| 275 | America/Panama | -05:00 |
| 276 | America/Pangnirtung | -04:00 |
| 277 | America/Paramaribo | -03:00 |
| 278 | America/Phoenix | -07:00 |
| 279 | America/Port-au-Prince | -04:00 |
| 280 | America/Port of Spain | -04:00 |
| 281 | America/Porto Velho | -04:00 |
| 282 | America/Puerto Rico | -04:00 |
| 283 | America/Punta Arenas | -03:00 |
| 284 | America/Rainy River | -05:00 |
| 285 | America/Rankin Inlet | -05:00 |
| 286 | America/Recife | -03:00 |
| 287 | America/Regina | -06:00 |
| 288 | America/Resolute | -05:00 |
| 289 | America/Rio Branco | -05:00 |
| 290 | America/Santarem | -03:00 |
| 291 | America/Santo Domingo | -04:00 |
| 293 | America/Scoresbysund | +00:00 |
| 294 | America/Sitka | -08:00 |
| 295 | America/St Barthelemy | -04:00 |
| 296 | America/St Johns | -02:30 |
| 297 | America/St Kitts | -04:00 |
| 298 | America/St Lucia | -04:00 |
| 299 | America/St Thomas | -04:00 |
| 300 | America/St Vincent | -04:00 |
| 301 | America/Swift Current | -06:00 |
| 302 | America/Tegucigalpa | -06:00 |
| 303 | America/Thule | -03:00 |
| 304 | America/Thunder Bay | -04:00 |
| 305 | America/Tortola | -04:00 |
| 306 | America/Vancouver | -07:00 |
| 307 | America/Whitehorse | -07:00 |
| 308 | America/Winnipeg | -05:00 |
| 309 | America/Yakutat | -08:00 |
| 310 | America/Yellowknife | -06:00 |
| 311 | Antarctica/Casey | +08:00 |
| 312 | Antarctica/Davis | +07:00 |
| 313 | Antarctica/DumontDUrville | +10:00 |
| 314 | Antarctica/Macquarie | +11:00 |
| 315 | Antarctica/Mawson | +05:00 |
| 316 | Antarctica/McMurdo | +12:00 |
| 317 | Antarctica/Palmer | -03:00 |
| 318 | Antarctica/Rothera | -03:00 |
| 319 | Antarctica/Syowa | +03:00 |
| 320 | Antarctica/Troll | +02:00 |
| 321 | Antarctica/Vostok | +06:00 |
| 322 | Arctic/Longyearbyen | +02:00 |
| 323 | Asia/Aden | +03:00 |
| 324 | Asia/Amman | +03:00 |
| 325 | Asia/Anadyr | +12:00 |
| 326 | Asia/Aqtau | +05:00 |
| 327 | Asia/Aqtobe | +05:00 |
| 328 | Asia/Ashgabat | +05:00 |
| 329 | Asia/Atyrau | +05:00 |
| 330 | Asia/Bahrain | +03:00 |
| 331 | Asia/Barnaul | +07:00 |
| 332 | Asia/Beirut | +03:00 |
| 333 | Asia/Bishkek | +06:00 |
| 334 | Asia/Brunei | +08:00 |
| 335 | Asia/Chita | +09:00 |
| 336 | Asia/Choibalsan | +08:00 |
| 337 | Asia/Colombo | +05:30 |
| 338 | Asia/Damascus | +03:00 |
| 339 | Asia/Dili | +09:00 |
| 340 | Asia/Dushanbe | +05:00 |
| 341 | Asia/Famagusta | +03:00 |
| 342 | Asia/Gaza | +03:00 |
| 343 | Asia/Hebron | +03:00 |
| 344 | Asia/Ho Chi Minh | +07:00 |
| 346 | Asia/Hovd | +07:00 |
| 347 | Asia/Jayapura | +09:00 |
| 348 | Asia/Khandyga | +09:00 |
| 350 | Asia/Kuching | +08:00 |
| 351 | Asia/Macau | +08:00 |
| 352 | Asia/Makassar | +08:00 |
| 353 | Asia/Manila | +08:00 |
| 354 | Asia/Nicosia | +03:00 |
| 355 | Asia/Novokuznetsk | +07:00 |
| 356 | Asia/Omsk | +06:00 |
| 357 | Asia/Oral | +05:00 |
| 358 | Asia/Phnom Penh | +07:00 |
| 359 | Asia/Pontianak | +07:00 |
| 360 | Asia/Pyongyang | +09:00 |
| 361 | Asia/Qatar | +03:00 |
| 362 | Asia/Qostanay | +06:00 |
| 363 | Asia/Qyzylorda | +05:00 |
| 364 | Asia/Sakhalin | +11:00 |
| 365 | Asia/Samarkand | +05:00 |
| 366 | Asia/Singapore | +08:00 |
| 367 | Asia/Srednekolymsk | +11:00 |
| 368 | Asia/Tehran | +04:30 |
| 369 | Asia/Thimphu | +06:00 |
| 370 | Asia/Tomsk | +07:00 |
| 371 | Asia/Ulaanbaatar | +08:00 |
| 372 | Asia/Ust-Nera | +10:00 |
| 373 | Asia/Vientiane | +07:00 |
| 374 | Asia/Yangon | +06:30 |
| 375 | Asia/Yekaterinburg | +05:00 |
| 376 | Atlantic/Bermuda | -03:00 |
| 377 | Atlantic/Canary | +01:00 |
| 379 | Atlantic/Faroe | +01:00 |
| 380 | Atlantic/Madeira | +01:00 |
| 381 | Atlantic/Reykjavik | +00:00 |
| 383 | Atlantic/St Helena | +00:00 |
| 384 | Atlantic/Stanley | -03:00 |
| 385 | Australia/Broken Hill | +09:30 |
| 386 | Australia/Currie | +10:00 |
| 387 | Australia/Eucla | +08:45 |
| 388 | Australia/Lindeman | +10:00 |
| 389 | Australia/Lord Howe | +10:30 |
| 390 | Europe/Andorra | +02:00 |
| 391 | Europe/Astrakhan | +04:00 |
| 392 | Europe/Busingen | +02:00 |
| 393 | Europe/Chisinau | +03:00 |
| 394 | Europe/Gibraltar | +02:00 |
| 395 | Europe/Guernsey | +01:00 |
| 396 | Europe/Isle of Man | +01:00 |
| 397 | Europe/Jersey | +01:00 |
| 398 | Europe/Kaliningrad | +02:00 |
| 399 | Europe/Kirov | +03:00 |
| 400 | Europe/Luxembourg | +02:00 |
| 401 | Europe/Malta | +02:00 |
| 402 | Europe/Mariehamn | +03:00 |
| 403 | Europe/Monaco | +02:00 |
| 404 | Europe/Oslo | +02:00 |
| 405 | Europe/Podgorica | +02:00 |
| 406 | Europe/Samara | +04:00 |
| 407 | Europe/San Marino | +02:00 |
| 408 | Europe/Saratov | +04:00 |
| 409 | Europe/Simferopol | +03:00 |
| 410 | Europe/Tirane | +02:00 |
| 411 | Europe/Ulyanovsk | +04:00 |
| 412 | Europe/Uzhgorod | +03:00 |
| 413 | Europe/Vaduz | +02:00 |
| 414 | Europe/Vatican | +02:00 |
| 415 | Europe/Zaporozhye | +03:00 |
| 416 | Europe/Zurich | +02:00 |
| 417 | Indian/Antananarivo | +03:00 |
| 418 | Indian/Chagos | +06:00 |
| 419 | Indian/Christmas | +07:00 |
| 420 | Indian/Cocos | +06:30 |
| 421 | Indian/Comoro | +03:00 |
| 422 | Indian/Kerguelen | +05:00 |
| 423 | Indian/Mahe | +04:00 |
| 424 | Indian/Maldives | +05:00 |
| 425 | Indian/Mauritius | +04:00 |
| 426 | Indian/Mayotte | +03:00 |
| 427 | Indian/Reunion | +04:00 |
| 428 | Pacific/Apia | +13:00 |
| 429 | Pacific/Bougainville | +11:00 |
| 430 | Pacific/Chatham | +12:45 |
| 431 | Pacific/Chuuk | +10:00 |
| 432 | Pacific/Easter | -06:00 |
| 433 | Pacific/Efate | +11:00 |
| 434 | Pacific/Enderbury | +13:00 |
| 435 | Pacific/Fakaofo | +13:00 |
| 436 | Pacific/Funafuti | +12:00 |
| 437 | Pacific/Galapagos | -06:00 |
| 438 | Pacific/Gambier | -09:00 |
| 439 | Pacific/Guadalcanal | +11:00 |
| 440 | Pacific/Honolulu | -10:00 |
| 441 | Pacific/Kosrae | +11:00 |
| 442 | Pacific/Kwajalein | +12:00 |
| 443 | Pacific/Majuro | +12:00 |
| 444 | Pacific/Marquesas | -09:30 |
| 445 | Pacific/Nauru | +12:00 |
| 446 | Pacific/Niue | -11:00 |
| 447 | Pacific/Norfolk | +11:00 |
| 448 | Pacific/Noumea | +11:00 |
| 449 | Pacific/Pago Pago | -11:00 |
| 450 | Pacific/Palau | +09:00 |
| 451 | Pacific/Pitcairn | -08:00 |
| 452 | Pacific/Pohnpei | +11:00 |
| 454 | Pacific/Rarotonga | -10:00 |
| 455 | Pacific/Saipan | +10:00 |
| 456 | Pacific/Tahiti | -10:00 |
| 457 | Pacific/Tarawa | +12:00 |
| 458 | Pacific/Wake | +12:00 |
| id | name | code | symbol |
|---|---|---|---|
| 1 | US Dollar | USD | $ |
| 2 | Canadian Dollar | CAD | CA$ |
| 3 | Euro | EUR | € |
| 4 | United Arab Emirates Dirham | AED | AED |
| 5 | Afghan Afghani | AFN | Af |
| 6 | Albanian Lek | ALL | ALL |
| 7 | Armenian Dram | AMD | AMD |
| 8 | Argentine Peso | ARS | AR$ |
| 9 | Australian Dollar | AUD | AU$ |
| 10 | Azerbaijani Manat | AZN | man. |
| 11 | Bosnia-Herzegovina Convertible Mark | BAM | KM |
| 12 | Bangladeshi Taka | BDT | Tk |
| 13 | Bulgarian Lev | BGN | BGN |
| 14 | Bahraini Dinar | BHD | BD |
| 15 | Burundian Franc | BIF | FBu |
| 16 | Brunei Dollar | BND | BN$ |
| 17 | Bolivian Boliviano | BOB | Bs |
| 18 | Brazilian Real | BRL | R$ |
| 19 | Botswanan Pula | BWP | BWP |
| 20 | Belarusian Ruble | BYN | Br |
| 21 | Belize Dollar | BZD | BZ$ |
| 22 | Congolese Franc | CDF | CDF |
| 23 | Swiss Franc | CHF | CHF |
| 24 | Chilean Peso | CLP | CL$ |
| 25 | Chinese Yuan | CNY | CN¥ |
| 26 | Colombian Peso | COP | CO$ |
| 27 | Costa Rican Colón | CRC | ₡ |
| 28 | Cape Verdean Escudo | CVE | CV$ |
| 29 | Czech Republic Koruna | CZK | Kč |
| 30 | Djiboutian Franc | DJF | Fdj |
| 31 | Danish Krone | DKK | Dkr |
| 32 | Dominican Peso | DOP | RD$ |
| 33 | Algerian Dinar | DZD | DA |
| 34 | Estonian Kroon | EEK | Ekr |
| 35 | Egyptian Pound | EGP | EGP |
| 36 | Eritrean Nakfa | ERN | Nfk |
| 37 | Ethiopian Birr | ETB | Br |
| 38 | British Pound Sterling | GBP | £ |
| 39 | Georgian Lari | GEL | GEL |
| 40 | Ghanaian Cedi | GHS | GH₵ |
| 41 | Guinean Franc | GNF | FG |
| 42 | Guatemalan Quetzal | GTQ | GTQ |
| 43 | Hong Kong Dollar | HKD | HK$ |
| 44 | Honduran Lempira | HNL | HNL |
| 45 | Croatian Kuna | HRK | kn |
| 46 | Hungarian Forint | HUF | Ft |
| 47 | Indonesian Rupiah | IDR | Rp |
| 48 | Israeli New Sheqel | ILS | ₪ |
| 49 | Indian Rupee | INR | Rs |
| 50 | Iraqi Dinar | IQD | IQD |
| 51 | Iranian Rial | IRR | IRR |
| 52 | Icelandic Króna | ISK | Ikr |
| 53 | Jamaican Dollar | JMD | J$ |
| 54 | Jordanian Dinar | JOD | JD |
| 55 | Japanese Yen | JPY | ¥ |
| 56 | Kenyan Shilling | KES | Ksh |
| 57 | Cambodian Riel | KHR | KHR |
| 58 | Comorian Franc | KMF | CF |
| 59 | South Korean Won | KRW | ₩ |
| 60 | Kuwaiti Dinar | KWD | KD |
| 61 | Kazakhstani Tenge | KZT | KZT |
| 62 | Lebanese Pound | LBP | LB£ |
| 63 | Sri Lankan Rupee | LKR | SLRs |
| 64 | Lithuanian Litas | LTL | Lt |
| 65 | Latvian Lats | LVL | Ls |
| 66 | Libyan Dinar | LYD | LD |
| 67 | Moroccan Dirham | MAD | MAD |
| 68 | Moldovan Leu | MDL | MDL |
| 69 | Malagasy Ariary | MGA | MGA |
| 70 | Macedonian Denar | MKD | MKD |
| 71 | Myanma Kyat | MMK | MMK |
| 72 | Macanese Pataca | MOP | MOP$ |
| 73 | Mauritian Rupee | MUR | MURs |
| 74 | Mexican Peso | MXN | MX$ |
| 75 | Malaysian Ringgit | MYR | RM |
| 76 | Mozambican Metical | MZN | MTn |
| 77 | Namibian Dollar | NAD | N$ |
| 78 | Nigerian Naira | NGN | ₦ |
| 79 | Nicaraguan Córdoba | NIO | C$ |
| 80 | Norwegian Krone | NOK | Nkr |
| 81 | Nepalese Rupee | NPR | NPRs |
| 82 | New Zealand Dollar | NZD | NZ$ |
| 83 | Omani Rial | OMR | OMR |
| 84 | Panamanian Balboa | PAB | B/. |
| 85 | Peruvian Nuevo Sol | PEN | S/. |
| 86 | Philippine Peso | PHP | ₱ |
| 87 | Pakistani Rupee | PKR | PKRs |
| 88 | Polish Zloty | PLN | zł |
| 89 | Paraguayan Guarani | PYG | ₲ |
| 90 | Qatari Rial | QAR | QR |
| 91 | Romanian Leu | RON | RON |
| 92 | Serbian Dinar | RSD | din. |
| 93 | Russian Ruble | RUB | RUB |
| 94 | Rwandan Franc | RWF | RWF |
| 95 | Saudi Riyal | SAR | SR |
| 96 | Sudanese Pound | SDG | SDG |
| 97 | Swedish Krona | SEK | Skr |
| 98 | Singapore Dollar | SGD | S$ |
| 99 | Somali Shilling | SOS | Ssh |
| 100 | Syrian Pound | SYP | SY£ |
| 101 | Thai Baht | THB | ฿ |
| 102 | Tunisian Dinar | TND | DT |
| 103 | Tongan Paʻanga | TOP | T$ |
| 104 | Turkish Lira | TRY | TL |
| 105 | Trinidad and Tobago Dollar | TTD | TT$ |
| 106 | New Taiwan Dollar | TWD | NT$ |
| 107 | Tanzanian Shilling | TZS | TSh |
| 108 | Ukrainian Hryvnia | UAH | ₴ |
| 109 | Ugandan Shilling | UGX | USh |
| 110 | Uruguayan Peso | UYU | $U |
| 111 | Uzbekistan Som | UZS | UZS |
| 112 | Venezuelan Bolívar | VEF | Bs.F. |
| 113 | Vietnamese Dong | VND | ₫ |
| 114 | CFA Franc BEAC | XAF | FCFA |
| 115 | CFA Franc BCEAO | XOF | CFA |
| 116 | Yemeni Rial | YER | YR |
| 117 | South African Rand | ZAR | R |
| 118 | Zambian Kwacha | ZMK | ZK |
| 119 | Zimbabwean Dollar | ZWL | ZWL$ |
<?php function createCampaign() { $token = getAccessToken(); $requestParameters = [ 'title' => 'My top campaign', 'email_accounts' => [649079], 'linkedin_accounts' => [], 'priority' => 'high', 'tracking' => [ 'open' => true, 'link_click' => true ], 'sending_settings' => [ 'sending_priority' => 'first_email', 'daily_sending_all' => 10, 'daily_sending_new_recipients' => 5, 'skip_unverifiable' => true, 'skip_unverified' => false, 'skip_who_replied' => true, 'skip_company_domain_who_replied' => false, 'skip_recipients_without_variables_data' => true, 'skip_other_recipients_email_addresses' => true, 'skip_recipients_added_to_my_another_campaign' => false, 'skip_recipients_added_to_team_another_campaign' => false, 'one_click_unsubscribe' => true, 'delay_type' => 'random', 'delay_from' => 600, 'delay_to' => 900 ], 'recipients' => [ 'list_id' => 32, 'black_list_id' => 8 ], 'schedule_id' => 4, 'start_campaign_at' => '2027-03-25 09:00:00', 'complete_campaign_at' => '2027-03-28 06:00:00', 'timezone' => 'America/New_York', 'complete_campaign_after_last_step' => false, 'archive_in_months' => 3, 'provider_matching' => false, 'sequence' => [ 'entry' => '1773996379996', 'steps' => [ [ '_ref' => '1773996379996', 'type' => 'email', 'content_slots' => 3, 'next' => '1774364404811' ], [ '_ref' => '1774364404811', 'type' => 'goal', 'goal_name' => 'end' ] ] ] ]; $options = [ CURLOPT_URL => 'https://api.snov.io/v2/campaigns/create', CURLOPT_RETURNTRANSFER => true, CURLOPT_FOLLOWLOCATION => true, CURLOPT_POST => true, CURLOPT_POSTFIELDS => json_encode($requestParameters), CURLOPT_HTTPHEADER => [ 'Authorization: Bearer ' . $token, 'Content-Type: application/json', ], ]; $ch = curl_init(); curl_setopt_array($ch, $options); $res = json_decode(curl_exec($ch), true); curl_close($ch); return $res; } ?>
import json import requests def create_campaign(): token = get_access_token() headers = { 'Authorization': 'Bearer ' + token, 'Content-Type': 'application/json' } request_parameters = { 'title': 'My top campaign', 'email_accounts': [649079], 'linkedin_accounts': [], 'priority': 'high', 'tracking': { 'open': True, 'link_click': True }, 'sending_settings': { 'sending_priority': 'first_email', 'daily_sending_all': 10, 'daily_sending_new_recipients': 5, 'skip_unverifiable': True, 'skip_unverified': False, 'skip_who_replied': True, 'skip_company_domain_who_replied': False, 'skip_recipients_without_variables_data': True, 'skip_other_recipients_email_addresses': True, 'skip_recipients_added_to_my_another_campaign': False, 'skip_recipients_added_to_team_another_campaign': False, 'one_click_unsubscribe': True, 'delay_type': 'random', 'delay_from': 600, 'delay_to': 900 }, 'recipients': { 'list_id': 32, 'black_list_id': 8 }, 'schedule_id': 4, 'start_campaign_at': '2027-03-25 09:00:00', 'complete_campaign_at': '2027-03-28 06:00:00', 'timezone': 'America/New_York', 'complete_campaign_after_last_step': False, 'archive_in_months': 3, 'provider_matching': False, 'sequence': { 'entry': '1773996379996', 'steps': [ { '_ref': '1773996379996', 'type': 'email', 'content_slots': 3, 'next': '1774364404811' }, { '_ref': '1774364404811', 'type': 'goal', 'goal_name': 'end' } ] } } res = requests.post( 'https://api.snov.io/v2/campaigns/create', json=request_parameters, headers=headers ) return json.loads(res.text)
{
"success": true,
"data": {
"id": 37505,
"status": "new",
"title": "My top campaign",
"email_accounts": [649079],
"linkedin_accounts": [],
"priority": "high",
"tracking": {
"open": true,
"link_click": true
},
"sending_settings": {
"sending_priority": "first_email",
"daily_sending_all": 10,
"daily_sending_new_recipients": 5,
"skip_unverifiable": true,
"skip_unverified": false,
"skip_who_replied": true,
"skip_company_domain_who_replied": false,
"skip_recipients_without_variables_data": true,
"skip_other_recipients_email_addresses": true,
"skip_recipients_added_to_my_another_campaign": false,
"skip_recipients_added_to_team_another_campaign": false,
"one_click_unsubscribe": true,
"delay_type": "random",
"delay_from": 600,
"delay_to": 900
},
"recipients": {
"list_id": 32,
"black_list_id": 8
},
"schedule_id": 4,
"start_campaign_at": "2027-03-25 09:00:00",
"complete_campaign_at": "2027-03-28 06:00:00",
"timezone": "America/New_York",
"complete_campaign_after_last_step": false,
"archive_in_months": 3,
"provider_matching": false,
"sequence": {
"entry": "1773996379996",
"steps": [
{
"_ref": "1773996379996",
"type": "email",
"content_slots": 3,
"content": [
{ "id": 17739963799960, "plain_text": false, "usage": "active" },
{ "id": 17739963799961, "plain_text": false, "usage": "active" },
{ "id": 17739963799962, "plain_text": false, "usage": "active" }
],
"next": "1774364404811"
},
{
"_ref": "1774364404811",
"type": "goal",
"goal_name": "end"
}
]
}
}
}
success | Boolean. true cuando la campaña fue creada. |
data.id | ID de la campaña creada. |
data.status | Estado de la campaña. Las campañas recién creadas se devuelven con new. |
data.title | Nombre de la campaña. |
data.email_accounts | Array de IDs de cuentas de email remitentes vinculadas a la campaña. |
data.linkedin_accounts | Array de IDs de cuentas de LinkedIn vinculadas a la campaña. |
data.priority | Prioridad de la campaña (low, medium, high). |
data.tracking | Configuración de seguimiento de email (open, link_click). |
data.sending_settings | Configuración de envío devuelta exactamente como fue aceptada por el servidor, incluyendo la configuración de retraso. |
data.recipients | Listas de destinatarios (list_id, black_list_id). |
data.schedule_id | ID del horario de envío vinculado a la campaña, o null. |
data.start_campaign_at | Fecha y hora de inicio del envío de la campaña. |
data.complete_campaign_at | Fecha y hora de parada del envío de la campaña. |
data.timezone | Identificador de la zona horaria en la que se ejecuta la campaña. |
data.complete_campaign_after_last_step | Si la campaña se completa automáticamente después de entregar el último paso. |
data.archive_in_months | Período de archivado automático en meses. |
data.provider_matching | Si la coincidencia de proveedor de email está habilitada. |
data.sequence | El diagrama de flujo de la campaña, devuelto con la misma estructura. Cada paso email se enriquece con un array content que describe los slots de contenido generados (id, plain_text, usage). |
data.deals | Configuración de creación de negocios, presente solo si deals fue suministrado en la solicitud. |
GETObtener información de la campaña
Este método te permite recuperar información sobre una campaña específica, como: cuentas de remitente conectadas, configuraciones de envío, información sobre la lista de destinatarios y detalles sobre los pasos de la secuencia.
| GET | https://api.snov.io/v2/campaigns/{campaign_id} |
campaign_id *Requerido | Identificador único de la campaña de la que deseas ver información. |
<?php function getCampaign(int $campaignId) { $token = getAccessToken(); $url = 'https://api.snov.io/v2/campaigns/' . $campaignId; $options = [ CURLOPT_URL => $url, CURLOPT_RETURNTRANSFER => true, CURLOPT_FOLLOWLOCATION => true, CURLOPT_HTTPHEADER => [ 'Authorization: Bearer ' . $token, 'Content-Type: application/json', ], ]; $ch = curl_init(); curl_setopt_array($ch, $options); $res = json_decode(curl_exec($ch), true); curl_close($ch); return $res; } ?>
import requests, json def get_campaign(campaign_id): token = get_access_token() headers = { 'Authorization': 'Bearer ' + token, 'Content-Type': 'application/json' } url = 'https://api.snov.io/v2/campaigns/' + str(campaign_id) res = requests.get(url, headers=headers) return json.loads(res.text)
{
"success": true,
"data": {
"id": 37505,
"status": "new",
"title": "My top campaign",
"email_accounts": [649079],
"linkedin_accounts": [],
"priority": "high",
"tracking": {
"open": true,
"link_click": true
},
"sending_settings": {
"sending_priority": "first_email",
"daily_sending_all": 10,
"daily_sending_new_recipients": 5,
"skip_unverifiable": true,
"skip_unverified": false,
"skip_who_replied": true,
"skip_company_domain_who_replied": false,
"skip_recipients_without_variables_data": true,
"skip_other_recipients_email_addresses": true,
"skip_recipients_added_to_my_another_campaign": false,
"skip_recipients_added_to_team_another_campaign": false,
"one_click_unsubscribe": true
},
"recipients": {
"list_id": 32,
"black_list_id": 8
},
"schedule_id": 4,
"start_campaign_at": "2027-03-25 09:00:00",
"complete_campaign_at": "2027-03-28 06:00:00",
"timezone": "America/New_York",
"complete_campaign_after_last_step": false,
"archive_in_months": 3,
"provider_matching": false,
"sequence": {
"entry": "1773996379996",
"steps": [
{
"_ref": "1773996379996",
"type": "email",
"content_slots": 3,
"content": [
{ "id": 17739963799960, "plain_text": false, "usage": "active" },
{ "id": 17739963799961, "plain_text": false, "usage": "active" },
{ "id": 17739963799962, "plain_text": false, "usage": "active" }
],
"next": "1774364404811"
},
{
"_ref": "1774364404811",
"type": "goal",
"goal_name": "end"
}
]
}
}
}
success | Boolean. true cuando la información de la campaña se recuperó correctamente. |
data.id | ID de la campaña. |
data.status | Estado de la campaña. Las campañas recién creadas se devuelven con new. |
data.title | Nombre de la campaña. |
data.email_accounts | Array de IDs de cuentas de correo del remitente asociadas a la campaña. |
data.linkedin_accounts | Array de IDs de cuentas de LinkedIn asociadas a la campaña. |
data.priority | Prioridad de la campaña (low, medium, high). |
data.tracking | Configuración del seguimiento de correos (open, link_click). |
data.sending_settings | Configuración de envío devuelta exactamente como fue aceptada por el servidor, incluida la configuración de retraso. |
data.recipients | Listas de destinatarios (list_id, black_list_id). |
data.schedule_id | ID del calendario de envío asociado a la campaña, o null. |
data.start_campaign_at | Fecha y hora en que la campaña comienza a enviar. |
data.complete_campaign_at | Fecha y hora en que la campaña deja de enviar. |
data.timezone | Identificador de la zona horaria en la que se ejecuta la campaña. |
data.complete_campaign_after_last_step | Si la campaña se completa automáticamente tras entregar el último paso. |
data.archive_in_months | Período de archivo automático en meses. |
data.provider_matching | Si la correspondencia por proveedor de correo está habilitada. |
data.sequence | El diagrama de flujo de la campaña, devuelto con la misma estructura. Cada paso email se enriquece con un array content que describe los slots de contenido generados (id, plain_text, usage). |
data.deals | Configuración de creación de deals, presente solo si deals fue proporcionado en la solicitud. |
PATCHActualizar campaña
Este método actualiza parcialmente una campaña de difusión existente en tu espacio de trabajo de snov.io. Solo se modifican los campos incluidos en el cuerpo de la solicitud; los campos omitidos permanecen sin cambios. Los objetos anidados (tracking, sending_settings, recipients, deals) también se fusionan — enviar {"tracking": {"open": false}} no elimina link_click. El cuerpo aceptado tiene la misma forma que Crear campaña, por lo que se puede enviar cualquier subconjunto de title, priority, email_accounts, linkedin_accounts, tracking, sending_settings, recipients, schedule_id, start_campaign_at, complete_campaign_at, timezone, complete_campaign_after_last_step, archive_in_months, provider_matching, sequence y deals.
Configuración principal (marcada con (core) a continuación) es editable solo mientras la campaña está en estado new (borrador) — se bloquea una vez que la campaña pasa a paused, active, scheduled, completed o archived.
Cuando se proporciona sequence, el array reemplaza completamente el diagrama de flujo existente. Los pasos cuyo _ref coincide con un ID de paso numérico existente se actualizan en su lugar; los pasos con un _ref no numérico se crean como nuevos; cualquier paso existente que falte en el array se elimina.
| PATCH | https://api.snov.io/v2/campaigns/{campaign_id} |
campaign_id *Requerido (path) | Entero. ID de la campaña a actualizar. |
title | Cadena. Nombre visible de la campaña. Máximo 255 caracteres. |
priority | Enumeración de cadenas. Prioridad de envío: low, medium, high. |
email_accounts | Array de enteros. IDs de cuentas de remitente de correo electrónico. No se pueden agregar cuentas de correo si la campaña activa no contiene pasos de correo electrónico. |
linkedin_accounts | Array de enteros. IDs de cuentas de LinkedIn. No se pueden agregar cuentas de LinkedIn si la campaña activa no contiene pasos de LinkedIn. |
provider_matching | Booleano. Hacer coincidir el proveedor de correo del destinatario con el proveedor de la cuenta remitente. Siempre false para campañas solo de LinkedIn. |
complete_campaign_after_last_step | Booleano. Detener la campaña una vez que todos los destinatarios pasen el último paso de la secuencia. |
archive_in_months | Entero. Archivar automáticamente después de esta cantidad de meses. Valores permitidos: 1, 2, 3, 6. |
schedule_id | Entero o null. ID del horario de envío. Un ID inexistente devuelve 404/422. |
start_campaign_at | Cadena (YYYY-MM-DD HH:MM:SS) o null. Fecha y hora en que la campaña debe iniciarse automáticamente. No se puede agregar si el campo estaba ausente en la creación; null no tiene efecto (el valor existente no se borra). |
complete_campaign_at | Cadena (YYYY-MM-DD HH:MM:SS) o null. Fecha y hora en que la campaña debe detenerse automáticamente. Debe ser posterior a start_campaign_at. null no tiene efecto. |
timezone | Cadena o null. Zona horaria usada para los campos de fecha; acepta identificadores de zona horaria IANA en el formato Region/City, p.ej. America/New_York. Solo tiene efecto cuando start_campaign_at está presente en la campaña. |
recipients (core) | Objeto. Configuración de destinatarios. Bloqueado en campañas iniciadas, editable en borrador. |
recipients.list_id (core) | Entero. ID de la lista de prospectos. |
recipients.black_list_id (core) | Entero o null. ID de la lista negra a excluir. |
tracking | Objeto. Configuración de seguimiento de correo electrónico. Ignorado para campañas solo de LinkedIn. |
tracking.open | Booleano. Rastrear aperturas de correo electrónico. |
tracking.link_click | Booleano. Rastrear clics en enlaces en correos electrónicos. |
sending_settings | Objeto. Controla cómo se envían los correos y qué destinatarios se omiten. |
sending_settings.sending_priority | Enumeración de cadenas. Qué correos van primero: first_email o follow_up. |
sending_settings.daily_sending_all | Entero o null. Máximo total de correos enviados por día a todos los destinatarios. null elimina el límite. |
sending_settings.daily_sending_new_recipients | Entero o null. Máximo de nuevos destinatarios contactados por día. null elimina el límite. |
sending_settings.skip_who_replied | Booleano. Detener seguimientos para prospectos que respondan. |
sending_settings.skip_company_domain_who_replied | Booleano. Omitir destinatarios del dominio de una empresa donde alguien respondió. |
sending_settings.skip_unverifiable (core) | Booleano. Omitir destinatarios cuyo correo no se puede verificar. Bloqueado en campañas iniciadas. |
sending_settings.skip_unverified (core) | Booleano. Omitir destinatarios con correos no verificados. Bloqueado en campañas iniciadas. |
sending_settings.skip_other_recipients_email_addresses (core) | Booleano. Si un prospecto tiene varias direcciones de correo, enviar solo al primer correo si es true. Bloqueado en campañas iniciadas. |
sending_settings.skip_recipients_added_to_my_another_campaign (core) | Booleano. Omitir destinatarios que ya están en otra campaña de este usuario. Bloqueado en campañas iniciadas. |
sending_settings.skip_recipients_added_to_team_another_campaign (core) | Booleano. Omitir destinatarios en otra campaña de cualquier miembro del equipo. Bloqueado en campañas iniciadas. |
sending_settings.skip_recipients_without_variables_data | Booleano. Omitir destinatarios que no tengan valores para variables personalizadas. |
sending_settings.one_click_unsubscribe | Booleano. Habilitar el encabezado de cancelación de suscripción con un clic en los correos. |
deals | Objeto o null. Configuración de creación de deals en el CRM. Pasar null para eliminar la configuración de deals. |
deals.event *Requerido cuando deals | Array de cadenas. Eventos que crean un deal: open, click, reply. |
deals.pipeline_id *Requerido cuando deals | Entero. ID del pipeline del CRM. |
deals.stage_id *Requerido cuando deals | Entero. ID de la etapa del pipeline. |
deals.potential_value | Entero. Valor estimado del deal. Debe ser positivo. |
deals.currency | Cadena. Código de moneda para el valor del deal, p.ej. USD, EUR. |
sequence | Objeto. Reemplazo completo de la secuencia de la campaña — cuando se proporciona, reemplaza todo el diagrama de flujo. |
sequence.entry *Requerido cuando sequence | Cadena. _ref del primer paso a ejecutar. |
sequence.steps *Requerido cuando sequence | Array de objetos de pasos. Lista completa de pasos. |
sequence.steps._ref *Requerido | Cadena. Identificador del paso. Un _ref numérico actualiza un paso existente; un _ref no numérico crea un nuevo paso. |
sequence.steps.type *Requerido | Enumeración de cadenas. Tipo de paso: email, delay, trigger, goal, linkedin. No se puede cambiar en pasos existentes (numérico _ref). |
sequence.steps.next | Cadena o null. _ref del paso al que continuar después de este (bloques lineales: email, linkedin, delay). |
sequence.steps.yes | Cadena. _ref del paso al que ir cuando se cumple la condición del trigger (solo trigger). |
sequence.steps.no | Cadena. _ref del paso al que ir cuando no se cumple la condición del trigger (solo trigger). |
sequence.steps.waiting_type *Requerido para delay / trigger | Enumeración de cadenas. Unidad de tiempo: minutes, hours, days. |
sequence.steps.waiting_val *Requerido para delay / trigger | Entero. Número de unidades de tiempo a esperar. Mín 1 para pasos delay y trigger. Límites por unidad: minutes ≤ 43200, hours ≤ 720, days ≤ 30. |
sequence.steps.action *Requerido para linkedin / trigger | Enumeración de cadenas. Acción a realizar o evento a esperar. Ver valores admitidos a continuación. |
sequence.steps.goal_name *Requerido para goal | Cadena. Etiqueta para este paso de objetivo, p.ej. Replied, Connected. Un bloque goal debe ser el último paso en su rama — no puede tener next y no puede ser el primer paso de la secuencia. |
sequence.steps.content_slots *Requerido para email | Entero (mín 1, máx 15). Número de variantes de contenido A/B. |
sequence.steps.content *Requerido para email al actualizar pasos existentes | Array de objetos. Metadatos de contenido copiados de la respuesta GET; cada elemento: {"id": <int>, "plain_text": <bool>, "usage": "active"}. |
sequence.steps.subject | Cadena o null. Asunto del correo o InMail; admite {{variables}}. Opcional para email; requerido para el paso linkedin con action=in_mail. |
sequence.steps.body *Requerido para invite / message / in_mail | Cadena (HTML). Cuerpo del mensaje para acciones de LinkedIn que envían texto. |
sequence.steps.value *Requerido para endorse_skills / check_connection_level | Entero (1–5) para endorse_skills; array de enteros (niveles de grado válidos) para el trigger check_connection_level. |
| visit | Visitar el perfil de LinkedIn del prospecto. | |
| like | Me gusta en una publicación del perfil del prospecto. | |
| follow | Seguir al prospecto en LinkedIn. | |
| invite | Enviar solicitud de conexión (requiere body). | |
| message | Enviar un mensaje directo de LinkedIn (requiere body). | |
| in_mail | Enviar un InMail de LinkedIn (requiere body y subject; debe ir seguido de un trigger linkedin_in_mail_sent). | |
| connected_on_linkedin | Comprueba si el prospecto ha aceptado la solicitud de conexión en LinkedIn. | |
| check_connection_level | Comprobar el nivel de grado de conexión del prospecto. | |
| endorse_skills | Respaldar habilidades en el perfil del prospecto (requiere value 1–5). | |
| trigger | open | Esperar para ver si el prospecto abre un correo electrónico. |
| trigger | click | Esperar para ver si el prospecto hace clic en un enlace en un correo electrónico. |
| trigger | calendly | Esperar para ver si el prospecto reserva a través de Calendly (debe seguir a un paso de correo; máx 30 días). |
| trigger | connected_on_linkedin | Disparador del sistema. Obligatorio después de un paso connected_on_linkedin de LinkedIn. El campo next del paso connected_on_linkedin debe apuntar a este disparador. |
| trigger | check_connection_level | Ramificar según el grado de conexión de LinkedIn del prospecto (requiere value: array de niveles de grado válidos). |
| trigger | linkedin_in_mail_sent | Trigger del sistema. Requerido después de un paso LinkedIn in_mail. El campo next del paso in_mail debe apuntar a este trigger. |
<?php function updateCampaign($campaignId) { $token = getAccessToken(); $requestParameters = [ 'title' => 'Updated title via API', 'priority' => 'medium', 'tracking' => [ 'open' => true, 'link_click' => false ], 'sending_settings' => [ 'sending_priority' => 'follow_up', 'daily_sending_all' => null, 'daily_sending_new_recipients' => 15, 'skip_who_replied' => true ] ]; $options = [ CURLOPT_URL => 'https://api.snov.io/v2/campaigns/' . $campaignId, CURLOPT_RETURNTRANSFER => true, CURLOPT_FOLLOWLOCATION => true, CURLOPT_CUSTOMREQUEST => 'PATCH', CURLOPT_POSTFIELDS => json_encode($requestParameters), CURLOPT_HTTPHEADER => [ 'Authorization: Bearer ' . $token, 'Content-Type: application/json', ], ]; $ch = curl_init(); curl_setopt_array($ch, $options); $res = json_decode(curl_exec($ch), true); curl_close($ch); return $res; } ?>
def update_campaign(campaign_id): token = get_access_token() headers = { 'Authorization': 'Bearer ' + token, 'Content-Type': 'application/json' } request_parameters = { 'title': 'Updated title via API', 'priority': 'medium', 'tracking': { 'open': True, 'link_click': False }, 'sending_settings': { 'sending_priority': 'follow_up', 'daily_sending_all': None, 'daily_sending_new_recipients': 15, 'skip_who_replied': True } } res = requests.patch( f'https://api.snov.io/v2/campaigns/{campaign_id}', json=request_parameters, headers=headers ) return json.loads(res.text)
{
"success": true,
"data": {
"id": 41816,
"status": "new",
"title": "Updated title via API",
"email_accounts": [18061],
"linkedin_accounts": [],
"priority": "medium",
"tracking": {
"open": true,
"link_click": false
},
"sending_settings": {
"sending_priority": "follow_up",
"daily_sending_all": null,
"daily_sending_new_recipients": 15,
"skip_unverifiable": true,
"skip_unverified": true,
"skip_who_replied": true,
"skip_company_domain_who_replied": false,
"skip_recipients_without_variables_data": false,
"skip_other_recipients_email_addresses": false,
"skip_recipients_added_to_my_another_campaign": false,
"skip_recipients_added_to_team_another_campaign": false,
"one_click_unsubscribe": false
},
"recipients": {
"list_id": 857538,
"black_list_id": 392812
},
"schedule_id": 1074,
"start_campaign_at": "2030-06-01 00:00:00",
"complete_campaign_at": "2030-10-01 01:00:00",
"timezone": "UTC",
"complete_campaign_after_last_step": false,
"archive_in_months": 3,
"provider_matching": false,
"sequence": {
"entry": "1778676939",
"steps": [
{
"_ref": "1778676939",
"type": "email",
"content_slots": 1,
"content": [
{ "id": 17786769390, "plain_text": false, "usage": "active" }
],
"next": "1778676940"
},
{
"_ref": "1778676940",
"type": "goal",
"goal_name": "end"
}
]
}
}
}
success | Booleano. true cuando la campaña fue actualizada. |
data.id | ID de la campaña actualizada. |
data.status | Estado actual de la campaña. |
data.title | Nombre de la campaña. |
data.email_accounts | Array de IDs de cuentas de correo remitente adjuntas a la campaña. |
data.linkedin_accounts | Array de IDs de cuentas de LinkedIn adjuntas a la campaña. |
data.priority | Prioridad de la campaña (low, medium, high). |
data.tracking | Configuración de seguimiento de correo (open, link_click). |
data.sending_settings | Configuración de envío devuelta exactamente como se almacena en el servidor tras la actualización. |
data.recipients | Listas de destinatarios (list_id, black_list_id). |
data.schedule_id | ID del horario de envío adjunto a la campaña, o null. |
data.start_campaign_at | Fecha y hora en que la campaña comienza a enviar. |
data.complete_campaign_at | Fecha y hora en que la campaña deja de enviar. |
data.timezone | Identificador de zona horaria en la que opera la campaña. |
data.complete_campaign_after_last_step | Si la campaña se completa automáticamente tras entregar el último paso. |
data.archive_in_months | Período de archivado automático en meses. |
data.provider_matching | Si la coincidencia de proveedor de correo está habilitada. |
data.sequence | El diagrama de flujo de la campaña, devuelto con la misma estructura tras la reconciliación. Cada paso email se enriquece con un array content que describe sus slots de contenido (id, plain_text, usage). |
data.deals | Configuración de creación de deals, presente solo si la campaña tiene deals configurados. |
POSTCambiar estado de la campaña
GratisEste método te permite gestionar el estado de la campaña: lanzarla, pausarla, completarla o archivarla.
| POST | https://api.snov.io/v2/campaigns/{campaign_id}/action |
campaign_id *Requerido (path) | Identificador único de la campaña cuyo estado deseas cambiar. |
action | El estado al que se puede transicionar la campaña. Valores permitidos: start, pause, resume, complete, archived. |
<?php $campaignId = 123; $apiUrl = 'https://api.snov.io/v2/campaigns/' . $campaignId . '/action'; $ch = curl_init($apiUrl); curl_setopt_array($ch, [ CURLOPT_RETURNTRANSFER => true, CURLOPT_POST => true, CURLOPT_HTTPHEADER => [ 'Authorization: Bearer ' . $accessToken, 'Content-Type: application/json', ], CURLOPT_POSTFIELDS => json_encode(['action' => 'start']), ]); $response = curl_exec($ch); curl_close($ch); $result = json_decode($response, true); print_r($result);
import requests campaign_id = 123 api_url = f'https://api.snov.io/v2/campaigns/{campaign_id}/action' response = requests.post( api_url, headers={'Authorization': f'Bearer {access_token}'}, json={'action': 'start'}, ) print(response.json())
{
"success": true
}
success | Puede devolver true o false dependiendo del resultado de la ejecución. |
errors | Una lista de errores ocurridos al cambiar el estado de la campaña. |
DELETEEliminar campaña
Este método elimina una campaña por su ID. La eliminación solo está permitida para campañas en estado new (borrador), complete o archived — las campañas en estado active, pause o scheduled no pueden eliminarse hasta que se detengan primero.
| DELETE | https://api.snov.io/v2/campaigns/{campaign_id} |
campaign_id *Requerido (path) | Entero. ID de la campaña a eliminar. |
<?php function deleteCampaign($campaignId) { $token = getAccessToken(); $options = [ CURLOPT_URL => 'https://api.snov.io/v2/campaigns/' . $campaignId, CURLOPT_RETURNTRANSFER => true, CURLOPT_FOLLOWLOCATION => true, CURLOPT_CUSTOMREQUEST => 'DELETE', CURLOPT_HTTPHEADER => [ 'Authorization: Bearer ' . $token, 'Content-Type: application/json', ], ]; $ch = curl_init(); curl_setopt_array($ch, $options); $res = json_decode(curl_exec($ch), true); curl_close($ch); return $res; } ?>
def delete_campaign(campaign_id): token = get_access_token() headers = { 'Authorization': 'Bearer ' + token, 'Content-Type': 'application/json' } res = requests.delete( f'https://api.snov.io/v2/campaigns/{campaign_id}', headers=headers ) return json.loads(res.text)
{
"success": true
}
success | Booleano. true cuando la campaña fue eliminada. |
Contenido del paso de correo electrónico
Estos métodos le permiten gestionar los bloques de contenido (asunto y cuerpo) de los pasos de correo electrónico en una secuencia de campaña. El contenido solo se puede modificar cuando la campaña está en estado new, paused o scheduled. Cada paso debe tener al menos un bloque de contenido.
GETVer todas las programaciones
GratisEste método muestra una lista de todas las programaciones de campañas.
| GET | https://api.snov.io/v2/campaigns/schedules |
| Este método no tiene parámetros de entrada. |
<?php function getCampaignSchedules() { $token = getAccessToken(); $options = [ CURLOPT_URL => 'https://api.snov.io/v2/campaigns/schedules', CURLOPT_RETURNTRANSFER => true, CURLOPT_FOLLOWLOCATION => true, CURLOPT_HTTPHEADER => [ 'Authorization: Bearer ' . $token, 'Content-Type: application/json', ], ]; $ch = curl_init(); curl_setopt_array($ch, $options); $res = json_decode(curl_exec($ch), true); curl_close($ch); return $res; } ?>
def get_campaign_schedules(): token = get_access_token() headers = { 'Authorization': 'Bearer ' + token, 'Content-Type': 'application/json' } res = requests.get('https://api.snov.io/v2/campaigns/schedules', headers=headers) return json.loads(res.text)
{
"data": [
{
"id": 1074,
"name": "UA Monday & Saturday",
"timezone": "Europe/Kyiv",
"days": [
{
"day": "sunday",
"enabled": false,
"start_time": "09:00",
"end_time": "18:00"
},
{
"day": "monday",
"enabled": true,
"start_time": "09:00",
"end_time": "17:00"
},
{
"day": "tuesday",
"enabled": false,
"start_time": "09:00",
"end_time": "18:00"
},
{
"day": "wednesday",
"enabled": false,
"start_time": "09:00",
"end_time": "18:00"
},
{
"day": "thursday",
"enabled": false,
"start_time": "09:00",
"end_time": "18:00"
},
{
"day": "friday",
"enabled": false,
"start_time": "09:00",
"end_time": "18:00"
},
{
"day": "saturday",
"enabled": true,
"start_time": "11:00",
"end_time": "16:30"
}
]
}
]
}
id | ID único de la programación. |
name | Nombre de la programación. |
timezone | Zona horaria que sigue la programación. |
days | Array de posibles días y horarios de envío de la programación. |
day | Día de la semana. |
enabled | Muestra true si el envío está permitido para el día. Devuelve false cuando el envío no está permitido para el día. |
start_time | Hora de inicio de la programación en ese día. |
end_time | Hora de finalización de la programación en ese día. |
POSTCrear contenido de paso de email
GratisEste método crea o actualiza un bloque de contenido para un paso de secuencia de email en una campaña. Si ya existe un bloque de contenido con el content_id especificado, será sobreescrito. El contenido solo puede modificarse cuando la campaña está en estado new, paused o scheduled.
| POST | https://api.snov.io/v2/campaigns/{campaign_id}/steps/{step_id}/content/create |
campaign_id *Requerido (path) | Entero. ID de la campaña. |
step_id *Requerido (path) | Entero. ID del paso de secuencia de email. |
content_id *Requerido | Entero. ID del bloque de contenido a escribir. Publicar el mismo content_id de nuevo sobreescribe el bloque existente. |
subject *Requerido | Cadena. Asunto del email. Admite {{variables}}. |
body *Requerido | Cadena (HTML). Cuerpo del email. |
plain_text *Requerido | Booleano. true envía el email como texto plano, false lo envía como HTML. |
usage *Requerido | Cadena. Estado del bloque de contenido. Valores permitidos: "active", "pause". |
<?php function createEmailContent(int $campaignId, int $stepId) { $token = getAccessToken(); $requestParameters = [ 'content_id' => 1, 'subject' => 'Hey, I have something for you', 'body' => '<p>Hi {{first_name}}, ...</p>', 'plain_text' => false, 'usage' => 'active', ]; $url = 'https://api.snov.io/v2/campaigns/' . $campaignId . '/steps/' . $stepId . '/content/create'; $options = [ CURLOPT_URL => $url, CURLOPT_RETURNTRANSFER => true, CURLOPT_FOLLOWLOCATION => true, CURLOPT_CUSTOMREQUEST => 'POST', CURLOPT_POSTFIELDS => json_encode($requestParameters), CURLOPT_HTTPHEADER => [ 'Authorization: Bearer ' . $token, 'Content-Type: application/json', ], ]; $ch = curl_init(); curl_setopt_array($ch, $options); $res = json_decode(curl_exec($ch), true); curl_close($ch); return $res; } ?>
def create_email_content(campaign_id, step_id): token = get_access_token() headers = { 'Authorization': 'Bearer ' + token, 'Content-Type': 'application/json' } request_parameters = { 'content_id': 1, 'subject': 'Hey, I have something for you', 'body': '<p>Hi {{first_name}}, ...</p>', 'plain_text': False, 'usage': 'active' } url = 'https://api.snov.io/v2/campaigns/' + str(campaign_id) + '/steps/' + str(step_id) + '/content/create' res = requests.post(url, json=request_parameters, headers=headers) return json.loads(res.text)
{
"success": true,
"data": {
"id": 11111,
"subject": "Hey, I have something for you",
"body": "Hi {{first_name}}, ...
",
"plain_text": false,
"usage": "active"
}
}success | Booleano. true cuando la solicitud fue exitosa. |
data.id | Entero. ID del bloque de contenido. |
data.subject | Cadena. Asunto del email. |
data.body | Cadena (HTML). Cuerpo del email. |
data.plain_text | Booleano. true si está en modo texto plano, false si es HTML. |
data.usage | Cadena. Estado del bloque de contenido. Valores permitidos: "active", "pause". |
GETObtener contenido de paso de email
GratisEste método devuelve un bloque de contenido de un paso de secuencia de email por su content_id.
| GET | https://api.snov.io/v2/campaigns/{campaign_id}/steps/{step_id}/content/{content_id} |
campaign_id *Requerido (path) | Entero. ID de la campaña. |
step_id *Requerido (path) | Entero. ID del paso de secuencia de email. |
content_id *Requerido (path) | Entero. ID del bloque de contenido. |
<?php function getEmailContent(int $campaignId, int $stepId, int $contentId) { $token = getAccessToken(); $url = 'https://api.snov.io/v2/campaigns/' . $campaignId . '/steps/' . $stepId . '/content/' . $contentId; $options = [ CURLOPT_URL => $url, CURLOPT_RETURNTRANSFER => true, CURLOPT_FOLLOWLOCATION => true, CURLOPT_HTTPHEADER => [ 'Authorization: Bearer ' . $token, 'Content-Type: application/json', ], ]; $ch = curl_init(); curl_setopt_array($ch, $options); $res = json_decode(curl_exec($ch), true); curl_close($ch); return $res; } ?>
def get_email_content(campaign_id, step_id, content_id): token = get_access_token() headers = { 'Authorization': 'Bearer ' + token, 'Content-Type': 'application/json' } url = 'https://api.snov.io/v2/campaigns/' + str(campaign_id) + '/steps/' + str(step_id) + '/content/' + str(content_id) res = requests.get(url, headers=headers) return json.loads(res.text)
{
"data": {
"id": 11111,
"subject": "Hey, I have something for you",
"body": "Hi {{first_name}}, ...
",
"plain_text": false,
"usage": "active"
}
}data.id | Entero. ID del bloque de contenido. |
data.subject | Cadena. Asunto del email. |
data.body | Cadena (HTML). Cuerpo del email. |
data.plain_text | Booleano. true si está en modo texto plano, false si es HTML. |
data.usage | Cadena. Estado del bloque de contenido. Valores permitidos: "active", "pause". |
PATCHActualizar contenido de paso de email
GratisEste método actualiza parcialmente un bloque de contenido de un paso de secuencia de email. Solo se actualizan los campos proporcionados en el cuerpo de la solicitud; los campos omitidos permanecen sin cambios. Debe incluirse al menos un campo. El contenido solo puede modificarse cuando la campaña está en estado new, paused o scheduled.
| PATCH | https://api.snov.io/v2/campaigns/{campaign_id}/steps/{step_id}/content/{content_id} |
campaign_id *Requerido (path) | Entero. ID de la campaña. |
step_id *Requerido (path) | Entero. ID del paso de secuencia de email. |
content_id *Requerido (path) | Entero. ID del bloque de contenido. |
subject | Cadena. Asunto del email. Admite {{variables}}. |
body | Cadena (HTML). Cuerpo del email. |
plain_text | Booleano. true para texto plano, false para HTML. |
usage | Cadena. Estado del bloque de contenido. Valores permitidos: "active", "pause". |
<?php function updateEmailContent(int $campaignId, int $stepId, int $contentId) { $token = getAccessToken(); $requestParameters = [ 'subject' => 'Updated subject', ]; $url = 'https://api.snov.io/v2/campaigns/' . $campaignId . '/steps/' . $stepId . '/content/' . $contentId; $options = [ CURLOPT_URL => $url, CURLOPT_RETURNTRANSFER => true, CURLOPT_FOLLOWLOCATION => true, CURLOPT_CUSTOMREQUEST => 'PATCH', CURLOPT_POSTFIELDS => json_encode($requestParameters), CURLOPT_HTTPHEADER => [ 'Authorization: Bearer ' . $token, 'Content-Type: application/json', ], ]; $ch = curl_init(); curl_setopt_array($ch, $options); $res = json_decode(curl_exec($ch), true); curl_close($ch); return $res; } ?>
def update_email_content(campaign_id, step_id, content_id): token = get_access_token() headers = { 'Authorization': 'Bearer ' + token, 'Content-Type': 'application/json' } request_parameters = { 'subject': 'Updated subject' } url = 'https://api.snov.io/v2/campaigns/' + str(campaign_id) + '/steps/' + str(step_id) + '/content/' + str(content_id) res = requests.patch(url, json=request_parameters, headers=headers) return json.loads(res.text)
{
"success": true,
"data": {
"id": 11111,
"subject": "Updated subject",
"body": "Hi {{first_name}}, ...
",
"plain_text": false,
"usage": "active"
}
}success | Booleano. true cuando la solicitud fue exitosa. |
data.id | Entero. ID del bloque de contenido. |
data.subject | Cadena. Asunto del email. |
data.body | Cadena (HTML). Cuerpo del email. |
data.plain_text | Booleano. true si está en modo texto plano, false si es HTML. |
data.usage | Cadena. Estado del bloque de contenido. Valores permitidos: "active", "pause". |
DELETEEliminar contenido de paso de email
GratisEste método elimina un bloque de contenido de un paso de secuencia de email. No está permitido eliminar el último bloque de contenido restante en un paso — cada paso debe tener al menos un bloque de contenido.
| DELETE | https://api.snov.io/v2/campaigns/{campaign_id}/steps/{step_id}/content/{content_id} |
campaign_id *Requerido (path) | Entero. ID de la campaña. |
step_id *Requerido (path) | Entero. ID del paso de secuencia de email. |
content_id *Requerido (path) | Entero. ID del bloque de contenido a eliminar. |
<?php function deleteEmailContent(int $campaignId, int $stepId, int $contentId) { $token = getAccessToken(); $url = 'https://api.snov.io/v2/campaigns/' . $campaignId . '/steps/' . $stepId . '/content/' . $contentId; $options = [ CURLOPT_URL => $url, CURLOPT_RETURNTRANSFER => true, CURLOPT_FOLLOWLOCATION => true, CURLOPT_CUSTOMREQUEST => 'DELETE', CURLOPT_HTTPHEADER => [ 'Authorization: Bearer ' . $token, 'Content-Type: application/json', ], ]; $ch = curl_init(); curl_setopt_array($ch, $options); $res = json_decode(curl_exec($ch), true); curl_close($ch); return $res; } ?>
def delete_email_content(campaign_id, step_id, content_id): token = get_access_token() headers = { 'Authorization': 'Bearer ' + token, 'Content-Type': 'application/json' } url = 'https://api.snov.io/v2/campaigns/' + str(campaign_id) + '/steps/' + str(step_id) + '/content/' + str(content_id) res = requests.delete(url, headers=headers) return json.loads(res.text)
{
"data": {
"success": true
}
}data.success | Booleano. true cuando el bloque de contenido fue eliminado correctamente. |
Gestión de destinatarios
Estos métodos le permiten gestionar los destinatarios de la campaña: verificar y actualizar sus estados, ver los prospectos completados y mantener listas de No enviar correo electrónico para controlar quién recibe sus campañas.
GETVerificar estado del destinatario
GratisEste método verifica si los emails especificados están presentes como destinatarios en una campaña particular y devuelve su estado actual. Está diseñado para la deduplicación antes de agregar nuevos destinatarios a una campaña, para evitar contactar prospectos que ya están inscritos, finalizados o dados de baja.
| GET | https://api.snov.io/v2/campaigns/[campaign_id]/recipient |
campaign_id *Requerido | Identificador único de la campaña. |
emails[] *Requerido | Array de direcciones de email a verificar. Mínimo 1, máximo 100 por solicitud. Cada email debe ser único y no puede tener más de 100 caracteres. |
<?php
function checkRecipientStatus($campaignId, array $emails)
{
$token = getAccessToken();
$query = http_build_query([
'access_token' => $token,
'emails' => $emails,
]);
$options = [
CURLOPT_URL => "https://api.snov.io/v2/campaigns/{$campaignId}/recipient?{$query}",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_FOLLOWLOCATION => true,
];
$ch = curl_init();
curl_setopt_array($ch, $options);
$res = json_decode(curl_exec($ch), true);
curl_close($ch);
return $res;
}
?>
def check_recipient_status(campaign_id, emails):
token = get_access_token()
params = [('access_token', token)] + [('emails[]', email) for email in emails]
res = requests.get(
f'https://api.snov.io/v2/campaigns/{campaign_id}/recipient',
params=params,
)
return json.loads(res.text)
{
"data": [
{
"email": "admin@snov.io",
"exist": true,
"status": "tocheck"
},
{
"email": "jn@snov.io",
"exist": false,
"status": null
},
{
"email": "dennis@snov.io",
"exist": true,
"status": "unsubscribe"
}
]
}
email | Dirección de email de la solicitud (devuelta tal cual). |
exist | true si el email está presente como destinatario en la campaña, false en caso contrario. |
status | Estado actual del destinatario en la campaña (p. ej. tocheck, active, finished, unsubscribe, moved). null cuando exist es false. |
POSTCambia el estado del destinatario
GratisCambiar el estado de un destinatario en una campaña específica.
| POST | https://api.snov.io/v1/change-recipient-status |
email *Requerido | La dirección de correo electrónico del prospecto. |
campaign_id *Requerido | El identificador de la campaña. Puedes encontrarlo en la URL cuando veas la información de la campaña (mostrar un ejemplo). |
status *Requerido | Puede contener Activo, Pausado o No suscrito. No puedes cambiar el estado de los destinatarios si su estado es Finalizado o Movido. |
<?php function changeRecipientStatus() { $token = getAccessToken(); $params = [ 'access_token' => $token, 'email' => 'gavin.vanrooyen@octagon.com', 'campaign_id' => '179025', 'status' => 'Paused' ]; $options = [ CURLOPT_URL => 'https://api.snov.io/v1/change-recipient-status', CURLOPT_POST => true, CURLOPT_POSTFIELDS => $params, CURLOPT_RETURNTRANSFER => true, CURLOPT_FOLLOWLOCATION => true ]; $ch = curl_init(); curl_setopt_array($ch, $options); $res = json_decode(curl_exec($ch), true); curl_close($ch); return $res; } ?>
def change_recipient_status(): token = get_access_token() params = {'access_token':token, 'email':'gavin.vanrooyen@octagon.com', 'campaign_id': '179025', 'status':'Paused' } res = requests.post('https://api.snov.io/v1/change-recipient-status', data=params) return json.loads(res.text)
{
"success": true
}El método devuelve success: true si el estado del prospecto ha sido cambiado con éxito. Si se produce algún error, el método devolverá success: false con una descripción del error.
GETVer lista de prospectos completados
GratisEste método devuelve los prospectos para los que se ha completado la campaña.
| GET | https://api.snov.io/v1/prospect-finished |
campaignId *Requerido | El identificador único de la campaña para recuperar la lista de prospectos. |
<?php function finishedProspects() { $token = getAccessToken(); $params = [ 'access_token' => $token, 'campaignId' => 1234567 ]; $params = http_build_query($params); $options = [ CURLOPT_URL => 'https://api.snov.io/v1/prospect-finished?'.$params, CURLOPT_RETURNTRANSFER => true, CURLOPT_FOLLOWLOCATION => true, ]; $ch = curl_init(); curl_setopt_array($ch, $options); $res = json_decode(curl_exec($ch), true); curl_close($ch); return $res; } ?>
def user_lists(): token = get_access_token() params = {'access_token':token, 'campaignId':1234567 } res = requests.get('https://api.snov.io/v1/prospect-finished', data=params) return json.loads(res.text)
[
{
"id": "88c268d404797d1001b4d72806207625",
"prospectId": "9c2eb5b46bb5873e408684dd577d002354e4f7026f47bf8a592d659bba3d2dd0ff186b90dc7a5",
"userName": "zach Jones",
"userEmail": "zach@entselect.us",
"campaign": "Zipari - Salesforce Developer",
"hash": "f3967971cbab6e769b5f7e3457d00159"
}
]
id | Identificador único de la solicitud. |
prospectId | Identificador único del prospecto. |
userName | Nombre completo del prospecto. |
userEmail | Dirección de email del prospecto. |
campaign | Nombre de la campaña. |
POSTAñadir a la lista de No enviar email
GratisUtilizando este método puedes añadir un correo electrónico o un dominio a tu Lista de no enviar email. Una vez que este correo electrónico/dominio se haya añadido a la lista, no podrás enviarle correos electrónicos.
| POST | https://api.snov.io/v1/do-not-email-list |
items | Correo electrónico o dominio que deseas añadir a tu lista de No enviar email. |
listId *Requerido | El identificador de la Lista de No enviar emails al que pertenecen los emails y los dominios. |
<?php function addToBlackList() { $token = getAccessToken(); $params = [ 'access_token' => $token ]; $data = http_build_query([ 'items' => [ 'gavin.vanrooyen@octagon.com', 'octagon.com' ] ]); $options = [ CURLOPT_URL => 'https://api.snov.io/v1/do-not-email-list?'. $data, CURLOPT_RETURNTRANSFER => true, CURLOPT_POST => true, CURLOPT_POSTFIELDS => $params, CURLOPT_FOLLOWLOCATION => true, ]; $ch = curl_init(); curl_setopt_array($ch, $options); $res = json_decode(curl_exec($ch), true); curl_close($ch); } ?>
def do_not_email_list(): token = get_access_token() params = { 'access_token':token, 'items[]':['gavin.vanrooyen@octagon.com','octagon.com'] } res = requests.post('https://api.snov.io/v1/do-not-email-list', data=params) return json.loads(res.text)
[
{
"success": true,
"data": {
"duplicates": []
}
}
]
duplicates | Este parámetro muestra qué correos electrónicos/dominios han sido añadidos previamente a la lista de No enviar email. |
GETVer todas las listas de "No enviar email"
GratisEste método devuelve una lista de todas las listas de "No enviar email".
| GET | https://api.snov.io/v2/blacklists |
| Este método no tiene parámetros de entrada. |
<?php function getBlacklists() { $token = getAccessToken(); $options = [ CURLOPT_URL => 'https://api.snov.io/v2/blacklists', CURLOPT_RETURNTRANSFER => true, CURLOPT_FOLLOWLOCATION => true, CURLOPT_HTTPHEADER => [ 'Authorization: Bearer ' . $token, 'Content-Type: application/json', ], ]; $ch = curl_init(); curl_setopt_array($ch, $options); $res = json_decode(curl_exec($ch), true); curl_close($ch); return $res; } ?>
def get_blacklists(): token = get_access_token() headers = { 'Authorization': 'Bearer ' + token, 'Content-Type': 'application/json' } res = requests.get('https://api.snov.io/v2/blacklists', headers=headers) return json.loads(res.text)
{
"data": [
{
"id": 8,
"name": "Do-not-email List",
"owner": "Rob Patison",
"total": 100
}
]
}
id | ID único de la lista de "No enviar email". |
name | Nombre de la lista. |
owner | Nombre de la persona que creó la lista. |
total | Número total de registros en la lista (correos y sitios web). |
Análisis e informes
Estos métodos de solo lectura proporcionan visibilidad sobre el rendimiento de la campaña: entrega, aperturas, clics y respuestas. Úselos para monitorear la participación y exportar datos para su análisis.
GETObtén análisis de la campaña
GratisEste método muestra las estadísticas de la campaña según los filtros aplicados.
| GET | https://api.snov.io/v2/statistics/campaign-analytics |
campaign_id | ID de la campaña. Puedes encontrarlo en la URL cuando veas la información de la campaña (ejemplo).
Si dejas este campo vacío, obtendrás datos de todas las campañas activas dentro del período de tiempo especificado. Para obtener datos de varias campañas, separa los ID con comas. |
sender_email | ID de la cuenta de correo del remitente. Puedes encontrarlo en la URL al ver o editar la información de la cuenta de email (ejemplo).
Para ver las analíticas de varias cuentas de correo, separa los ID con comas. Alternativamente, deja este parámetro vacío si no deseas aplicar un filtro de cuenta de email. |
sender_linkedin | ID de cuenta de LinkedIn del remitente. Puedes encontrarlo en la URL al ver o editar la información de la cuenta de LinkedIn. Para ver las analíticas de varias cuentas, separa los IDs con comas. Deja este parámetro vacío si no deseas aplicar un filtro de cuenta de LinkedIn. |
campaign_owner | Para ver los datos de la campaña de un miembro específico del equipo, ingresa la dirección de email. Para filtrar por múltiples propietarios de campañas, lista las direcciones de email separadas por comas (sin espacios). Ejemplo: example1@gmail.com,example2@gmail.com Ten en cuenta que para utilizar este filtro, tu cuenta debe tener habilitado el permiso de ‘Ver registros del equipo’, y debe estar en un plan Pro o superior. |
date_from *Requerido | La fecha de inicio del período para el cual deseas recibir estadísticas. Formato: aaaa-mm-dd. |
date_to *Requerido | La fecha de finalización del período para el cual deseas recibir estadísticas. Formato: aaaa-mm-dd. |
<?php
function getCampaignAnalytics()
{
$token = getAccessToken();
$campaignIds = [1, 2];
$senderEmailIds = [21, 22];
$senderLinkedInIds = [31, 32, 33];
$ownerEmails = ['owner1@email.loc', 'owner2@email.loc'];
$params = [
'access_token' => $token,
'campaign_id' => implode(',', $campaignIds),
'sender_email' => implode(',', $senderEmailIds),
'sender_linkedin' => implode(',', $senderLinkedInIds),
'campaign_owner' => implode(',', $ownerEmails),
'date_from' => '2024-06-15',
'date_to' => '2024-09-15',
];
$params = http_build_query($params);
$options = [
CURLOPT_URL => 'https://api.snov.io/v2/statistics/campaign-analytics?' . $params,
CURLOPT_RETURNTRANSFER => true,
CURLOPT_FOLLOWLOCATION => true
];
$ch = curl_init();
curl_setopt_array($ch, $options);
$res = json_decode(curl_exec($ch), true);
curl_close($ch);
return $res;
}
?>
def get_campaign_analytics():
token = get_access_token()
campaign_ids = [1, 2]
sender_email_ids = [21, 22]
sender_linkedin_ids = [31, 32, 33]
owner_emails = ['owner1@email.loc', 'owner2@email.loc']
params = {
'access_token': token,
'campaign_id': ','.join(map(str, campaign_ids)),
'sender_email': ','.join(map(str, sender_email_ids)),
'sender_linkedin': ','.join(map(str, sender_linkedin_ids)),
'campaign_owner': ','.join(owner_emails),
'date_from': '2024-06-15',
'date_to': '2024-09-15',
}
res = requests.get('https://api.snov.io/v2/statistics/campaign-analytics', params=params)
return json.loads(res.text)
{
"total_contacted": 32,
"emails_sent": 31,
"first_emails": 24,
"first_emails_rate": "77%",
"follow_ups": 7,
"follow_ups_rate": "23%",
"delivered": 30,
"delivered_rate": "97%",
"bounced": 1,
"bounced_rate": "3%",
"contacted_by_email": 23,
"email_opens": 16,
"email_opens_rate": "70%",
"link_clicks": 0,
"link_clicks_rate": "0%",
"email_replies": 16,
"email_replies_rate": "70%",
"unsubscribed": 0,
"unsubscribed_rate": "0%",
"auto_replied": 0,
"auto_replied_rate": "0%",
"contacted_by_linkedin": 10,
"linkedin_total_replies": 9,
"linkedin_total_replies_rate": "90%",
"connection_request_replies": 2,
"connection_request_replies_rate": "22%",
"message_replies": 7,
"message_replies_rate": "78%",
"in_mail_replies": 0,
"in_mail_replies_rate": "0%",
"connection_requests": 2,
"accepted_requests": 2,
"accepted_requests_rate": "100%",
"failed_connection_requests": 0,
"messages_sent": 9,
"linkedin_views": 9,
"linkedin_likes": 0,
"linkedin_follows": 0,
"in_mail_sent": 0,
"interested": 8,
"interested_rate": "32%",
"maybe": 8,
"maybe_rate": "32%",
"not_interested": 4,
"not_interested_rate": "16%"
}
total_contacted | Número total de destinatarios que fueron contactados por email o LinkedIn (solicitud de conexión, mensaje o InMail). |
emails_sent | Número total de emails enviados a través de las campañas. Ten en cuenta que esto no incluye los emails enviados fuera de las campañas. |
first_emails | Número de primeros emails en una secuencia de campaña que fueron enviados dentro del período de tiempo indicado. |
first_emails_rate | Porcentaje de primeros emails sobre el total de emails enviados. |
follow_ups | Número de emails de seguimiento en una secuencia de campaña que se enviaron dentro del período de tiempo indicado. |
follow_ups_rate | Porcentaje de emails de seguimiento respecto al total deemails enviados. |
delivered | Número de emails enviados que no rebotaron. |
delivered_rate | Porcentaje de emails que no rebotaron del total de emails enviados. |
bounced | Número de emails que rebotaron. |
bounced_rate | Porcentaje de emails que rebotaron en relación con el total de emails enviados. |
contacted_by_email | Número de destinatarios que recibieron al menos un email que no rebotó. |
email_opens | Número de destinatarios que abrieron tu email al menos una vez. |
email_opens_rate | Porcentaje de destinatarios que abrieron tu email al menos una vez, en relación con todos los destinatarios contactados. |
link_clicks | Número de destinatarios que hicieron clic en al menos un enlace en tus campañas. |
link_clicks_rate | Porcentaje de destinatarios que hicieron clic en al menos un enlace en las campañas, en relación con el total de destinatarios contactados. |
email_replies | Número de destinatarios que respondieron al menos una vez. |
email_replies_rate | Porcentaje de destinatarios que respondieron al menos una vez de todos los destinatarios contactados. |
unsubscribed | Número de destinatarios que hicieron clic en el enlace de "Cancelar suscripción" en tus campañas, optando por no recibir más emails. |
unsubscribed_rate | Porcentaje de destinatarios que hicieron clic en el enlace de "Cancelar suscripción" en tus campañas, de todos los destinatarios contactados. |
auto_replied | Número de destinatarios que respondieron automáticamente a los emails de tu campaña. |
auto_replied_rate | Porcentaje de destinatarios que respondieron automáticamente de todos los destinatarios contactados. |
contacted_by_linkedin | Número de destinatarios a quienes enviaste al menos un mensaje o solicitud de conexión en LinkedIn. |
linkedin_total_replies | Número de destinatarios que respondieron al menos una vez a cualquiera de los mensajes enviados en LinkedIn (mensajes de LinkedIn, mensajes de solicitud de conexión e InMail). |
linkedin_total_replies_rate | Porcentaje de destinatarios que respondieron al menos una vez a cualquiera de los mensajes enviados en LinkedIn (mensajes de LinkedIn, mensajes de solicitud de conexión e InMail). |
connection_request_replies | Número de destinatarios que respondieron a un mensaje de solicitud de conexión. |
connection_request_replies_rate | Porcentaje de destinatarios que respondieron a un mensaje de solicitud de conexión de todos los destinatarios contactados. |
message_replies | Número de destinatarios que respondieron a un mensaje regular de LinkedIn. |
message_replies_rate | Porcentaje de destinatarios que respondieron a un mensaje regular de LinkedIn de todos los destinatarios contactados. |
in_mail_replies | Número de destinatarios que respondieron a un mensaje InMail en LinkedIn. |
in_mail_replies_rate | Porcentaje de destinatarios que respondieron a un mensaje InMail en LinkedIn. |
connection_requests | Número de solicitudes de conexión enviadas a prospectos a través de campañas de Snov.io. |
accepted_requests | Número de solicitudes de conexión que fueron aceptadas por miembros de LinkedIn. |
accepted_requests_rate | Porcentaje de solicitudes de conexión que fueron aceptadas de todas las solicitudes enviadas. |
failed_connection_requests | Número de solicitudes de conexión en LinkedIn que no se enviaron debido a:
|
messages_sent | Número de mensajes enviados en LinkedIn. |
linkedin_views | Número de perfiles de prospectos visualizados. |
linkedin_likes | Número de publicaciones de prospectos con "me gusta" en LinkedIn. |
linkedin_follows | Número de perfiles de prospectos seguidos. |
in_mail_sent | Número total de mensajes InMail enviados. |
interested | Número de destinatarios que mostraron interés en sus respuestas. |
interested_rate | Porcentaje de destinatarios que mostraron interés en sus respuestas. |
maybe | Número de destinatarios que no expresaron interés ni desinterés directo en sus respuestas. |
maybe_rate | Porcentaje de destinatarios que no expresaron interés ni desinterés directo en sus respuestas. |
not_interested | Número de destinatarios que no mostraron interés en sus respuestas. |
not_interested_rate | Porcentaje de destinatarios que no mostraron interés en sus respuestas. |
GETVer el progreso de la campaña
GratisEste método devuelve el progreso y el estado de la campaña.
| GET | https://api.snov.io/v2/campaigns/[campaign_id]/progress |
campaign_id *Requerido | ID de la campaña. Puedes encontrarlo en la URL cuando ves la información de la campaña (ejemplo). |
<?php
function getCampaignProgress()
{
$token = getAccessToken();
$campaignId = 1;
$params = [
'access_token' => $token,
];
$params = http_build_query($params);
$options = [
CURLOPT_URL => "https://api.snov.io/v2/campaigns/$campaignId/progress?" . $params,
CURLOPT_RETURNTRANSFER => true,
CURLOPT_FOLLOWLOCATION => true
];
$ch = curl_init();
curl_setopt_array($ch, $options);
$res = json_decode(curl_exec($ch), true);
curl_close($ch);
return $res;
}
?>
def get_campaign_progress():
token = get_access_token()
campaign_id = 1
params = {
'access_token': token,
}
res = requests.get(f"https://api.snov.io/v2/campaigns/{campaign_id}/progress", params=params)
return json.loads(res.text)
{
"status":"Active",
"unfinished":1,
"progress":"90%"
}
progress | Porcentaje de destinatarios que:
|
unfinished | Número de destinatarios en la campaña que no llegaron al final de la secuencia o para quienes la secuencia no fue detenida. |
status | Estado de la campaña. Aprende más |
GETObtener informe de actividad de destinatarios de campaña
GratisEste método devuelve un informe detallado de actividad para todos los destinatarios de una campaña — eventos de envío, apertura, clic, respuesta, rebote y cancelación de suscripción — junto con los detalles del prospecto. Refleja el informe de actividad de destinatarios disponible en la interfaz de la campaña y es adecuado para sincronizar la actividad de la campaña con paneles externos o CRMs.
| GET | https://api.snov.io/v2/campaigns/[campaignId]/recipients-activity |
campaignId *Requerido | Identificador único de la campaña. |
dateFrom *Requerido | Inicio del rango de fechas en formato Y-m-d (UTC). |
dateTo *Requerido | Fin del rango de fechas en formato Y-m-d (UTC). El rango máximo entre dateFrom y dateTo es de 31 días. |
offset | Desplazamiento de paginación (predeterminado: 0). |
limit | Número de registros por página (predeterminado: 100, máximo: 1000). |
<?php
function getCampaignRecipientsActivity($campaignId, $dateFrom, $dateTo, $offset = 0, $limit = 100)
{
$token = getAccessToken();
$params = http_build_query([
'access_token' => $token,
'dateFrom' => $dateFrom,
'dateTo' => $dateTo,
'offset' => $offset,
'limit' => $limit,
]);
$options = [
CURLOPT_URL => "https://api.snov.io/v2/campaigns/{$campaignId}/recipients-activity?{$params}",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_FOLLOWLOCATION => true,
];
$ch = curl_init();
curl_setopt_array($ch, $options);
$res = json_decode(curl_exec($ch), true);
curl_close($ch);
return $res;
}
?>
def get_campaign_recipients_activity(campaign_id, date_from, date_to, offset=0, limit=100):
token = get_access_token()
params = {
'access_token': token,
'dateFrom': date_from,
'dateTo': date_to,
'offset': offset,
'limit': limit,
}
res = requests.get(
f'https://api.snov.io/v2/campaigns/{campaign_id}/recipients-activity',
params=params,
)
return json.loads(res.text)
{
"data": [
{
"event_time": "2025-12-15 10:58:52",
"event_type": "sent",
"sender_email": "sender@snov.io",
"email_subject": "About our plans",
"recipient_email": "recipient@snov.io",
"recipient_name": "Den Johnson",
"phone": "380631234567",
"industry": "Information Technology & Services",
"country": "Ukraine",
"location": "Kyiv",
"company": "Snov.io",
"job_position": "Quality assurance engineer",
"hq_phone": "380631234567",
"website": "snov.io"
},
{
"event_time": "2025-12-15 10:58:58",
"event_type": "open",
"sender_email": "sender@snov.io",
"email_subject": "About our plans",
"recipient_email": "recipient@snov.io",
"recipient_name": "Den Johnson",
"phone": "380631122333",
"industry": "Information Technology & Services",
"country": "Ukraine",
"location": "Kyiv",
"company": "Snov.io",
"job_position": "Quality assurance engineer",
"hq_phone": "380631234567",
"website": "snov.io"
}
],
"pagination": {
"total": 2,
"offset": 0,
"limit": 100,
"has_more": false
}
}
event_time | Hora del evento en ISO 8601 (UTC). |
event_type | Tipo de evento: sent, open, click, reply, bounce, unsubscribe. |
sender_email | Dirección de email del remitente (buzón de la campaña). |
email_subject | Línea de asunto del email en la secuencia de la campaña. |
recipient_email | Dirección de email del destinatario. |
recipient_name | Nombre completo del destinatario. |
phone | Número de teléfono del destinatario (del perfil del prospecto). |
country | País del destinatario. |
location | Ubicación del destinatario (ciudad, región). |
industry | Sector de la empresa del destinatario. |
company | Nombre de la empresa del destinatario. |
job_position | Cargo del destinatario. |
website | Sitio web de la empresa del destinatario. |
hq_phone | Número de teléfono de la sede de la empresa del destinatario. |
total | Número total de registros que coinciden con la solicitud. |
offset | Desplazamiento de paginación actual. |
limit | Tamaño de página utilizado para la respuesta. |
has_more | true si hay más registros más allá de la página actual. |
GETVer correos electrónicos enviados
GratisEste método muestra la información sobre los correos electrónicos enviados en la campaña.
| GET | https://api.snov.io/v1/emails-sent |
campaignId *Requerido | Identificador único de la campaña para la que deseas ver los correos electrónicos enviados. |
offset | Puedes recopilar hasta 10.000 correos electrónicos enviados por cada solicitud. Si tu campaña envió más correos electrónicos, utiliza el desplazamiento para indicar cuántos correos electrónicos anteriores quieres omitir. Por ejemplo, si tu campaña ha enviado 20.000 correos electrónicos y deseas solicitar los correos electrónicos del 10.001 al 20.000, establece el desplazamiento en 10.000. Si el desplazamiento no se especifica, recibirás los últimos 10.000 correos electrónicos que se enviaron dentro de la campaña. |
<?php function emailsSended() { $token = getAccessToken(); $params = [ 'access_token' => $token, 'campaignId' => 1234567 ]; $params = http_build_query($params); $options = [ CURLOPT_URL => 'https://api.snov.io/v1/emails-sent?'.$params, CURLOPT_RETURNTRANSFER => true, CURLOPT_FOLLOWLOCATION => true, ]; $ch = curl_init(); curl_setopt_array($ch, $options); $res = json_decode(curl_exec($ch), true); curl_close($ch); return $res; } ?>
def user_lists(): token = get_access_token() params = {'access_token':token, 'campaignId':1234567 } res = requests.get('https://api.snov.io/v1/emails-sent', data=params) return json.loads(res.text)
[
{
"sentDate": {
"date": "2020-07-06 06:58:10.000000",
"timezone_type": 3,
"timezone": "UTC"
},
"userName": "John Doe",
"userEmail": "johndoe@snov.io",
"campaign": "Test",
"hash": "be8fd412b793c15ccab9f1a6573d6595",
"id": "010f091d81860753a19867ba1dd805d1"
},
{
"sentDate": {
"date": "2020-07-06 06:56:44.000000",
"timezone_type": 3,
"timezone": "UTC"
},
"userName": "Mister Smith",
"userEmail": "mistersmith@snov.io",
"campaign": "Test",
"hash": "55bb20def471e630c539935cb0efcbf8",
"id": "00e3df8427477a21d64bbe959ff95471"
}
]
sentDate | Hora exacta en que se envió el correo electrónico. |
userName | Nombre completo del prospecto al que se envió el correo electrónico. |
userEmail | Dirección de email del prospecto. |
campaign | Nombre de la campaña. |
GETObtén información sobre la apertura de la campaña
GratisEste método muestra la información sobre los correos electrónicos abiertos en la campaña.
| GET | https://api.snov.io/v1/get-emails-opened |
campaignId *Requerido | Identificador único de la campaña de la que deseas ver información sobre las aperturas de los correos electrónicos. |
offset | Puedes recopilar hasta 10.000 aperturas por cada solicitud. Si tu campaña tiene más correos electrónicos abiertos, usa el desplazamiento para indicar cuántas aperturas anteriores deseas omitir. Por ejemplo, si tu campaña tiene 20.000 aperturas y quieres solicitar las aperturas 10.001-20.000, configura el desplazamiento como 10.000. Si el desplazamiento no está especificado, recibirás los últimos 10.000 correos electrónicos abiertos. |
<?php function emailsOpen() { $token = getAccessToken(); $params = [ 'access_token' => $token, 'campaignId' => 1234567 ]; $params = http_build_query($params); $options = [ CURLOPT_URL => 'https://api.snov.io/v1/get-emails-opened?'.$params, CURLOPT_RETURNTRANSFER => true, CURLOPT_FOLLOWLOCATION => true, ]; $ch = curl_init(); curl_setopt_array($ch, $options); $res = json_decode(curl_exec($ch), true); curl_close($ch); return $res; } ?>
def user_lists(): token = get_access_token() params = {'access_token':token, 'campaignId':1234567 } res = requests.get('https://api.snov.io/v1/get-emails-opened', data=params) return json.loads(res.text)
[
{
"visitedAt": {
"date": "2020-01-08 21:48:14.000000",
"timezone_type": 3,
"timezone": "UTC"
},
"campaignId": 1234567
"campaign": "My top campaign",
"prospectId": "a9e58c3eecff94e617815a90ca412c4c305045102be1312b41fd0073c9c9f3eee30e090bbc3e3",
"prospectFirstName": "John",
"prospectLastName": "Doe",
"prospectName": "John Doe",
"sourcePage": null,
"source": "copy",
"locality": null,
"industry": null,
"country": null,
"prospectEmail": "Johndoe@snov.io",
"hash": "20b1aeb0e2949fdf7e58363f84b7aff1",
"emailSubject": "\"Special content for you\"",
"emailBody": "\"<\p>Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.<\/p>\"",
"skills": "",
"links": null,
"customFields": null,
"id": "c2a67a47d59745f548ea7b0213c3a81d",
"customField_Phone": ""
}
]
campaignId | Identificador único de la campaña. |
campaign | Nombre de la campaña. |
prospectName | Nombre completo del prospecto que abrió un email. |
emailSubject | Línea de asunto del correo electrónico que se abrió. |
visitedAt | Hora exacta en que el prospecto abrió el correo electrónico. |
GETComprobar los clics del link
GratisEste método devuelve información sobre todos los destinatarios de la campaña que han hecho clic en un link en uno de los correos electrónicos de la campaña.
| GET | https://api.snov.io/v1/get-emails-clicked |
campaignId *Requerido | Identificador único de la campaña para la que desea ver los clics de los links. |
offset | Puedes recopilar hasta 10.000 clics por cada solicitud. Si tu campaña tiene más clics, utiliza el desplazamiento para indicar cuántos clics anteriores quieres omitir. Por ejemplo, si tu campaña tiene 20.000 clics y deseas solicitar los clics del 10.001 al 20.000, establece el desplazamiento en 10.000. Si el desplazamiento no se especifica, recibirás los últimos 10.000 correos electrónicos que hicieron clic en un enlace dentro de la campaña. |
<?php function emailsClicked() { $token = getAccessToken(); $params = [ 'access_token' => $token, 'campaignId' => 1234567 ]; $params = http_build_query($params); $options = [ CURLOPT_URL => 'https://api.snov.io/v1/get-emails-clicked?'.$params, CURLOPT_RETURNTRANSFER => true, CURLOPT_FOLLOWLOCATION => true, ]; $ch = curl_init(); curl_setopt_array($ch, $options); $res = json_decode(curl_exec($ch), true); curl_close($ch); return $res; } ?>
def user_lists(): token = get_access_token() params = {'access_token':token, 'campaignId':1234567 } res = requests.get('https://api.snov.io/v1/get-emails-clicked', data=params) return json.loads(res.text)
[
{
"visitedAt": {
"date": "2020-01-08 21:48:14.000000",
"timezone_type": 3,
"timezone": "UTC"
},
"campaignId": 1234567
"campaign": "My top campaign",
"prospectId": "a9e58c3eecff94e617815a90ca412c4c305045102be1312b41fd0073c9c9f3eee30e090bbc3e3",
"prospectFirstName": "John",
"prospectLastName": "Doe",
"prospectName": "John Doe",
"sourcePage": null,
"source": "copy",
"locality": null,
"industry": null,
"country": null,
"prospectEmail": "Johndoe@snov.io",
"hash": "20b1aeb0e2949fdf7e58363f84b7aff1",
"emailSubject": "\"Special content for you\"",
"emailBody": "\"<\p>Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.<\/p>\"",
"skills": "",
"links": null,
"customFields": null,
"id": "c2a67a47d59745f548ea7b0213c3a81d",
"customField_Phone": ""
}
]
campaignId | Identificador único de la campaña. |
campaign | Nombre de la campaña. |
prospectName | Nombre completo del prospeccto que hizo clic en un link de un correo electrónico de la campaña. |
prospectEmail | Dirección de email del prospecto. |
emailSubject | Línea de asunto del correo electrónico que contenía un link cliqueado. |
emailBody | Contenidos del correo electrónico. |
visitedAt | La hora exacta en que el prospecto hizo clic en un link del correo electrónico. |
GETVer todas las respuestas de la campaña
GratisEste método muestra una lista de todas las respuestas recibidas en una campaña — tanto respuestas de email como respuestas de LinkedIn (respuestas a solicitudes de conexión, respuestas a mensajes de LinkedIn e InMail). Cada registro representa un par único de (prospecto, tipo de respuesta); las respuestas dentro de un registro están ordenadas cronológicamente.
| GET | https://api.snov.io/v2/campaigns/[campaign_id]/all-replies |
campaign_id *Requerido | Identificador único de la campaña. |
offset | Desplazamiento de paginación (predeterminado: 0). |
<?php
function campaignAllReplies($campaignId, $offset = 0)
{
$token = getAccessToken();
$params = http_build_query([
'access_token' => $token,
'offset' => $offset,
]);
$options = [
CURLOPT_URL => "https://api.snov.io/v2/campaigns/{$campaignId}/all-replies?{$params}",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_FOLLOWLOCATION => true,
];
$ch = curl_init();
curl_setopt_array($ch, $options);
$res = json_decode(curl_exec($ch), true);
curl_close($ch);
return $res;
}
?>
def get_campaign_all_replies(campaign_id, offset=0):
token = get_access_token()
params = {
'access_token': token,
'offset': offset,
}
res = requests.get(
f'https://api.snov.io/v2/campaigns/{campaign_id}/all-replies',
params=params,
)
return json.loads(res.text)
{
"data": [
{
"campaignId": 38573,
"campaign": "All replies campaign",
"prospectId": "aed674fa6404b38954b4ed68f4fd4901b15c9ca9b9393522a052a420aa2690df99614e277d",
"prospectName": "Snov.io",
"prospectEmail": "office@snov.io",
"linkedInProfile": "https://www.linkedin.com/in/snovio",
"replyType": "email",
"receivedAt": "2026-04-29 10:09:42",
"replies": [
{
"subject": "Re: All replies campaign",
"message": "This is reply to email",
"receivedAt": "2026-04-29 10:09:42"
}
]
},
{
"campaignId": 38573,
"campaign": "All replies campaign",
"prospectId": "504d37faada2989dda5f7621393ed9b07e4dccaba44b7332e48fd425c75a77e3d653d24b60",
"prospectName": "Snov.io",
"prospectEmail": "office@snov.io",
"linkedInProfile": "https://www.linkedin.com/in/snovio",
"replyType": "linkedinMessage",
"receivedAt": "2026-04-29 09:26:07",
"replies": [
{
"subject": "",
"message": "Hello! This is reply to Li message",
"receivedAt": "2026-04-29 09:26:07"
}
]
}
]
}
campaignId | Identificador único de la campaña. |
campaign | Nombre de la campaña. |
prospectId | Identificador único del prospecto. |
prospectName | Nombre completo del prospecto. |
prospectEmail | Dirección de email del prospecto. |
linkedInProfile | URL del perfil de LinkedIn del prospecto (si está disponible). |
replyType | Tipo de respuesta: email, linkedinMessage, linkedinInvite, linkedinInMail. |
receivedAt | Fecha y hora de la primera respuesta en este par (prospecto, tipo de respuesta). |
replies[].subject | Asunto de la respuesta (cadena vacía para las respuestas de LinkedIn sin asunto). |
replies[].message | Cuerpo de la respuesta. |
replies[].receivedAt | Fecha y hora en que se recibió la respuesta específica. |
GETVer las respuestas de email de la campaña
GratisEste método devuelve las respuestas de email recibidas en una campaña, incluyendo el nombre del prospecto, el ID, la campaña, etc. Para obtener respuestas de LinkedIn (solicitud de conexión, mensaje directo, InMail) además de las respuestas de email, utiliza el método Ver todas las respuestas de la campaña.
| GET | https://api.snov.io/v1/get-emails-replies |
campaignId *Requerido | Identificador único de la campaña de la que quieres ver las respuestas. |
offset | Puedes recopilar hasta 10.000 respuestas por cada solicitud. Si tu campaña tiene más respuestas, utiliza el desplazamiento para indicar cuántas respuestas anteriores deseas omitir. Por ejemplo, si tu campaña tiene 20.000 respuestas y deseas solicitar respuestas 10.001-20.000, configura el desplazamiento como 10.000. Si el desplazamiento no se especifica, recibirás las últimas 10.000 respuestas recibidas. |
<?php function campaignReplies() { $token = getAccessToken(); $params = [ 'access_token' => $token, 'campaignId' => 1234567 ]; $params = http_build_query($params); $options = [ CURLOPT_URL => 'https://api.snov.io/v1/get-emails-replies?'.$params, CURLOPT_RETURNTRANSFER => true, CURLOPT_FOLLOWLOCATION => true, ]; $ch = curl_init(); curl_setopt_array($ch, $options); $res = json_decode(curl_exec($ch), true); curl_close($ch); return $res; } ?>
def user_lists(): token = get_access_token() params = {'access_token':token, 'campaignId':1234567 } res = requests.get('https://api.snov.io/v1/get-emails-replies', data=params) return json.loads(res.text)
[
{
"visitedAt": {
"date": "2020-07-14 13:10:46.000000",
"timezone_type": 3,
"timezone": "UTC"
},
"campaignId": 1234567,
"campaign": "My top campaign",
"prospectId": "7a941739b09f1187532d52a684df545f3a223e432c7f53662264db8d33db80ee5fc19e573416a",
"prospectFirstName": "John",
"prospectLastName": "Doe",
"prospectName": "John Doe",
"sourcePage": null,
"source": "copy",
"locality": null,
"industry": "Airlines/Aviation",
"country": null,
"prospectEmail": "Johndoe@snov.io",
"hash": "6745f8162ecadbe325693345d1a53976",
"emailSubject": "\"Special content for you\"",
"emailBody": "\"<\p>Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.<\/p>\"",
"skills": "",
"links": null,
"customFields": null,
"id": "f676edc5de58f341dc7bf4e75c0c8580",
"customField_Phone": "",
"customField_Birthday": ""
}
]
campaignId | Identificador único de la campaña. |
campaign | Nombre de la campaña. |
prospectName | Nombre completo del prospecto. |
emailSubject | Línea de asunto del correo electrónico que recibió una respuesta. |
emailBody | Contenido del correo electrónico que ha recibido respuesta. |
POSTAñade el prospecto a la lista
GratisAgregar un prospecto a una lista específica. Este método será útil para aquellos que quieran automatizar la adición de prospectos a las listas con campañas activas por email. De esta manera, después de que un prospecto se agregue automáticamente a una lista elegida, se iniciará automáticamente una campaña para ellos.
| POST | https://api.snov.io/v1/add-prospect-to-list |
email | La dirección de correo electrónico del prospecto. |
fullName | El nombre completo del prospecto. |
firstName | El nombre del prospecto. |
lastName | El apellido del prospecto. |
phones | Arreglo con números de teléfono de prospectos. |
country | El país del prospecto. Los nombres de los países se definen aquí. Por favor, utiliza solo los países de esta lista. |
locality | La ubicación del prospecto. |
position | El cargo del prospecto. |
companyName | El nombre de la empresa del prospecto. |
companySite | La página web de la empresa del prospecto. Por favor, utiliza el http://example.com formato. |
updateContact | Actualiza un prospecto existente. Acepta true o false.
|
createDuplicates | Crea un prospecto duplicado. Acepta true o false.
Solo un parámetro, updateContact o createDuplicates, puede estar establecido en true. |
customFields[specialization] | Puede añadir valores personalizados en campos personalizados previamente creados. Para ello, especifica el nombre del campo personalizado entre los [brackets]. |
socialLinks[linkedIn] *Required if email is null | Un enlace al perfil de redes sociales del prospecto. Especifica el nombre de la red social entre [corchetes] (LinkedIn, Facebook o X). |
listId *Requerido | El identificador de la lista a la que pertenece el prospecto. |
<?php function addProspectToList() { $token = getAccessToken(); $params = [ 'access_token' => $token, 'email' => 'john.doe@example.com', 'fullName' => 'John Doe', 'firstName' => 'John', 'lastName' => 'Doe', 'phones' => ['+18882073333', '+18882074444'], 'country' => 'United States', 'locality' => 'Woodbridge, New Jersey', 'socialLinks' => [ 'linkedIn' => 'https://www.linkedin.com/in/johndoe/&social', 'twiiter' => 'https://twitter.com/johndoe&social', ], 'customFields[specialization]'=> 'Software Engineering', 'position' => 'Vice President of Sales', 'companyName' => 'GoldenRule', 'companySite' => 'https://goldenrule.com', 'updateContact' => true, 'listId' => '12345', ]; $options = [ CURLOPT_URL => 'https://api.snov.io/v1/add-prospect-to-list', CURLOPT_POST => true, CURLOPT_POSTFIELDS => $params, CURLOPT_RETURNTRANSFER => true, CURLOPT_FOLLOWLOCATION => true ]; $ch = curl_init(); curl_setopt_array($ch, $options); $res = json_decode(curl_exec($ch), true); curl_close($ch); return $res; } ?>
def add_prospect_to_list(): token = get_access_token() params = {'access_token':token, 'email':'john.doe@example.com', 'fullName': 'John Doe', 'firstName':'John', 'lastName':'Doe', 'phones':['+18882073333', '+18882074444'], 'country':'United States', 'locality':'Woodbridge, New Jersey', 'socialLinks[linkedIn]':'https://www.linkedin.com/in/johndoe/&social', 'social[twiiter]':'https://twitter.com/johndoe&social', 'customFields[specialization]':'Software Engineering', 'position':'Vice President of Sales', 'companyName':'GoldenRule', 'companySite':'https://goldenrule.com', 'updateContact':1, 'listId':'12345' } res = requests.post('https://api.snov.io/v1/add-prospect-to-list', data=params) return json.loads(res.text)
{ "email": "john.doe@example.com", "listId": 12345678, "createDuplicates": false, "updateContact": true, "fullName": "John Doe", "firstName": "John", "lastName": "Doe", "position": "Vice President of Sales", "companyName": "GoldenRule", "companySite": "https://goldenrule.com", "phones": [ "+18882073333", "+18882074444" ], "country": "United States", "locality": "Woodbridge, New Jersey", "customFields": { "specialization": "Software Engineering" }, "socialLinks": { "linkedIn": "https://www.linkedin.com/in/johndoe/&social", "twitter": "https://twitter.com/johndoe&social" } }
{
"success": true,
"id": "0Y2QzowWL1rHpIptwaRp0Q==",
"added": true,
"updated": false
}success | Es true si el prospecto se ha añadido con éxito a la lista. |
id | Se ha añadido el identificador de los prospectos. |
added | Es true si el prospecto se ha añadido a la lista. |
updated | Es true si se han actualizado los datos del prospecto existente. |
errors | Ha habido un error al añadir el prospecto a la lista. |
POSTEncuentra el prospect por el ID
GratisEncuentra prospectos de tus listas por id. Conociendo el id de un prospecto específico puedes obtener información completa sobre el mismo, incluyendo las listas y campañas a las que ha sido añadido.
| POST | https://api.snov.io/v1/get-prospect-by-id |
id *Requerido | El identificador del prospecto. Se puede ver en la respuesta cuando se añade un prospecto a través de Añade el prospecto a la lista método API o en la URL al ver la página del prospecto (ver un ejemplo). |
<?php function getProspectById() { $token = getAccessToken(); $params = [ 'access_token' => $token, 'id' => 'xusD3-T_K5IktGoaa8Jc8A==' ]; $options = [ CURLOPT_URL => 'https://api.snov.io/v1/get-prospect-by-id', CURLOPT_POST => true, CURLOPT_POSTFIELDS => $params, CURLOPT_RETURNTRANSFER => true, CURLOPT_FOLLOWLOCATION => true ]; $ch = curl_init(); curl_setopt_array($ch, $options); $res = json_decode(curl_exec($ch), true); curl_close($ch); return $res; } ?>
def getProspectById(): token = get_access_token() params = {'access_token':token, 'id':'xusD3-T_K5IktGoaa8Jc8A==' } res = requests.post('https://api.snov.io/v1/get-prospect-by-id', data=params) return json.loads(res.text)
{
"success": true,
"data": {
"id": "xusD3-T_K5IktGoaa8Jc8A==",
"name": "Gavin Vanrooyen",
"firstName": "Gavin",
"lastName": "Vanrooyen",
"industry": "Entertainment",
"country": "United States",
"locality": "Greater Atlanta Area",
"social": [
{
"link": "https:\/\/www.linkedin.com\/in\/gavin-vanrooyen-8090738\/",
"type": "linkedIn"
}
],
"lastUpdateDate": {
"date": "2019-09-11 12:37:58.000000",
"timezone_type": 3,
"timezone": "UTC"
},
"currentJob": [
{
"companyName": "Octagon",
"position": "Senior Brand Director",
"socialLink": "https:\/\/www.linkedin.com\/company\/659312",
"site": "http:\/\/octagon.com",
"locality": "United States",
"state": null,
"city": null,
"street": null,
"street2": null,
"postal": null,
"founded": null,
"startDate": "2018-07-31",
"endDate": null,
"size": "1-10",
"industry": "Entertainment",
"companyType": "Public Company",
"country": "United States"
}
],
"previousJob": [
{
"companyName": "UPS",
"position": "Manager, Sponsorships and Events",
"socialLink": "https:\/\/www.linkedin.com\/company\/152322",
"site": "http:\/\/www.ups.com\/",
"locality": "United States",
"state": "GA",
"city": "Atlanta",
"street": "55 Glenlake Parkway, NE",
"street2": null,
"postal": "30328",
"founded": "1907",
"startDate": null,
"endDate": null,
"size": "10001+",
"industry": "Logistics and Supply Chain",
"companyType": "Public Company",
"country": "United States"
}
],
"lists": [
{
"id": 1250344,
"name": "People List"
}
],
"campaigns": []
}
}success | Es true si se encuentra el prospecto |
id | Identificador único del perfil |
name | Nombre completo del prospecto |
firstName | Primer nombre del prospecto |
lastName | Apellido del prospecto |
industry | Sector de actividad indicado en el perfil del prospecto |
country | País de prospecto |
locality | Ubicación de prospecto |
social | Enlaces a los perfiles sociales de los prospectos |
currentJobs | La matriz contiene información sobre el puesto de trabajo actual de prospecto |
previousJobs | La matriz contiene información sobre los cargos anteriores del prospecto |
lastUpdateDate | Fecha de la última actualización del perfil |
lists | Listas a las que se ha añadido el prospecto |
campaigns | Lista de campañas a las que se ha añadido este prospecto como destinatario. Contiene breves estadísticas como el estado, el número de mensajes enviados, las aperturas y las respuestas. |
POSTEncuentra el prospecto por el email
GratisEncuentra prospectos de sus listas por dirección de correo electrónico. Cuando buscas por correo electrónico, recibes una lista de todos los prospectos vinculados a esta dirección de correo electrónico. Cada elemento de la lista contiene información completa sobre el prospecto, incluyendo las listas y las campañas a las que ha sido añadido.
| POST | https://api.snov.io/v1/get-prospects-by-email |
email *Requerido | La dirección de correo electrónico del prospecto. |
<?php function getProspectsByEmail() { $token = getAccessToken(); $params = [ 'access_token' => $token, 'email' => 'gavin.vanrooyen@octagon.com' ]; $options = [ CURLOPT_URL => 'https://api.snov.io/v1/get-prospects-by-email', CURLOPT_POST => true, CURLOPT_POSTFIELDS => $params, CURLOPT_RETURNTRANSFER => true, CURLOPT_FOLLOWLOCATION => true ]; $ch = curl_init(); curl_setopt_array($ch, $options); $res = json_decode(curl_exec($ch), true); curl_close($ch); return $res; } ?>
def getProspectsByEmail(): token = get_access_token() params = {'access_token':token, 'email':'gavin.vanrooyen@octagon.com' } res = requests.post('https://api.snov.io/v1/get-prospects-by-email', data=params) return json.loads(res.text)
{
"success": true,
"data": [
{
"id": "xusD3-T_K5IktGoaa8Jc8A==",
"name": "Gavin Vanrooyen",
"firstName": "Gavin",
"lastName": "Vanrooyen",
"industry": "Entertainment",
"country": "United States",
"locality": "Greater Atlanta Area",
"social": [
{
"link": "https:\/\/www.linkedin.com\/in\/gavin-vanrooyen-809073755\/",
"type": "linkedIn"
}
],
"lastUpdateDate": {
"date": "2019-09-11 12:37:58.000000",
"timezone_type": 3,
"timezone": "UTC"
},
"currentJob": [
{
"companyName": "Octagon",
"position": "Senior Brand Director",
"socialLink": "https:\/\/www.linkedin.com\/company\/659333",
"site": "http:\/\/octagon.com",
"locality": "United States",
"state": null,
"city": null,
"street": null,
"street2": null,
"postal": null,
"founded": null,
"startDate": "2018-07-31",
"endDate": null,
"size": "1-10",
"industry": "Entertainment",
"companyType": "Public Company",
"country": "United States"
}
],
"previousJob": [
{
"companyName": "UPS",
"position": "Manager, Sponsorships and Events",
"socialLink": "https:\/\/www.linkedin.com\/company\/1523574",
"site": "http:\/\/www.ups.com\/",
"locality": "United States",
"state": "GA",
"city": "Atlanta",
"street": "55 Glenlake Parkway, NE",
"street2": null,
"postal": "30328",
"founded": "1907",
"startDate": null,
"endDate": null,
"size": "10001+",
"industry": "Logistics and Supply Chain",
"companyType": "Public Company",
"country": "United States"
}
],
"lists": [
{
"id": 1250344,
"name": "People List"
}
],
"campaigns": []
}
]
}success | Es true si se encuentra el prospecto |
id | Identificador único del perfil |
name | Nombre completo del prospecto |
firstName | Nombre del prospecto |
lastName | Apellido del prospecto |
industry | Sector de actividad indicado en el perfil del prospecto |
country | País del prospecto |
locality | Ubicación del prospecto |
social | Enlaces a los perfiles sociales de los prospectos |
currentJobs | La matriz contiene información sobre el cargo actual del cliente potencial |
previousJobs | La matriz contiene información sobre los títulos de trabajo anteriores del cliente potencial |
lastUpdateDate | Fecha de la última actualización del perfil |
lists | Listas a las que se ha añadido el prospecto |
campaigns | Lista de campañas a las que se ha añadido este prospecto como destinatario. Contiene breves estadísticas como el estado, el número de mensajes enviados, las aperturas y las respuestas. |
GETEncuentra los campos personalizados del prospecto
GratisEste método devuelve una lista de todos los campos personalizados creados por el usuario, incluyendo el nombre de los campos, si el campo es opcional u obligatorio, y el tipo de datos del campo.
| GET | https://api.snov.io/v1/prospect-custom-fields |
| No hay parámetros de entrada para este método |
<?php function customFields() { $token = getAccessToken(); $params = [ 'access_token' => $token, ]; $params = http_build_query($params); $options = [ CURLOPT_URL => 'https://api.snov.io/v1/prospect-custom-fields?'.$params, CURLOPT_RETURNTRANSFER => true, CURLOPT_FOLLOWLOCATION => true ]; $ch = curl_init(); curl_setopt_array($ch, $options); $res = json_decode(curl_exec($ch), true); curl_close($ch); return $res; } ?>
def custom_fields(): token = get_access_token() params = {'access_token':token } res = requests.get('https://api.snov.io/v1/prospect-custom-fields', data=params) return json.loads(res.text)
[
{
"key": "customFields['company']",
"label": "company",
"required": false,
"type": "string"
},
{
"key": "customFields['Project name']",
"label": "Project name",
"required": false,
"type": "string"
},
{
"key": "customFields['SEO']",
"label": "SEO",
"required": false,
"type": "string"
}
]
key | La clave del campo en la matriz customFields . |
label | El nombre del campo. |
required | Es true si el campo personalizado es obligatorio. |
type | El tipo de datos del campo personalizado (cadena, número o fecha). |
GETVer listas de usuarios
GratisEste método devuelve todas las listas creadas por el usuario. Puedes utilizar este método para revisar las listas que se pueden utilizar para una campaña por email.
| GET | https://api.snov.io/v1/get-user-lists |
| No hay parámetros de entrada para este método |
<?php function getUserLists() { $token = getAccessToken(); $params = [ 'access_token' => $token, ]; $params = http_build_query($params); $options = [ CURLOPT_URL => 'https://api.snov.io/v1/get-user-lists?'.$params, CURLOPT_RETURNTRANSFER => true, CURLOPT_FOLLOWLOCATION => true ]; $ch = curl_init(); curl_setopt_array($ch, $options); $res = json_decode(curl_exec($ch), true); curl_close($ch); return $res; } ?>
def user_lists(): token = get_access_token() params = {'access_token':token } res = requests.get('https://api.snov.io/v1/get-user-lists', params=params) return json.loads(res.text)
[
{
"id": 1818597,
"name": "FirstSend",
"contacts": 1,
"isDeleted": false,
"creationDate": {
"date": "2020-04-07 08:25:44.000000",
"timezone_type": 3,
"timezone": "UTC"
},
"deletionDate": null
},
{
"id": 1505383,
"name": "All prospects",
"contacts": 10,
"isDeleted": true,
"creationDate": {
"date": "2019-12-17 15:07:30.000000",
"timezone_type": 3,
"timezone": "UTC"
},
"deletionDate": {
"date": "2020-02-17 14:05:44.000000",
"timezone_type": 3,
"timezone": "UTC"
}
},
{
"id": 1479070,
"name": "EMAIL",
"contacts": 13,
"isDeleted": true,
"creationDate": {
"date": "2019-12-06 10:51:01.000000",
"timezone_type": 3,
"timezone": "UTC"
},
"deletionDate": {
"date": "2020-02-17 14:05:48.000000",
"timezone_type": 3,
"timezone": "UTC"
}
}
]
id | Identificador único de la lista de usuarios. |
name | Nombre de la lista |
contacts | El número de prospectos en la lista. |
isDeleted | Estado de la lista. Es true si la lista ha sido borrada. |
creationDate | La fecha y la hora de creación de la lista (incluye información sobre la fecha, la hora y la zona horaria). |
deleteDate | Si la lista se ha eliminado, contiene la fecha y la hora de la supresión de la lista (incluye información sobre la fecha, la hora y la zona horaria). |
POSTVer prospectos en la lista
GratisEste método devuelve todos los datos de los prospectos en una lista específica, incluyendo los datos del prospecto como las direcciones de correo electrónico y su estado.
| POST | https://api.snov.io/v1/prospect-list |
listId *Requerido | El identificador único de la lista. |
page | Puedes elegir en qué página de la lista quieres empezar tu búsqueda. Este campo es opcional. |
perPage | Establece el número máximo de prospectos que se incluirán en la respuesta. El valor máximo es 5.000. |
<?php function prospectsInList() { $token = getAccessToken(); $params = [ 'access_token' => $token, 'listId' => '1234567', 'page' => '1', 'perPage' => '2' ]; $options = [ CURLOPT_URL => ' https://api.snov.io/v1/prospect-list', CURLOPT_POSTFIELDS => $params, CURLOPT_RETURNTRANSFER => true, CURLOPT_FOLLOWLOCATION => true ]; $ch = curl_init(); curl_setopt_array($ch, $options); $res = json_decode(curl_exec($ch), true); curl_close($ch); return $res; } ?>
def prospect_in_list(): token = get_access_token() params = {'access_token':token, 'listId':'1234567', 'page':'1', 'perPage':'2' } res = requests.post('https://api.snov.io/v1/prospect-list', params=params) return json.loads(res.text)
Ten en cuenta que los resultados de los prospectos se muestran en orden inverso, del último al primero.
{
"success": true,
"list": {
"name": "Lead LIST",
"contacts": 3,
"creationDate": {
"date": "2020-05-19 17:34:39.000000",
"timezone_type": 3,
"timezone": "UTC"
},
"emailsCount": []
},
"prospects": [
{
"id": "226db935fc93422496fda5d5209e8cbf77cc77ec685891706028009b86608f7ce5877a3faf",
"name": "Andrew Garfiled",
"firstName": "Andrew",
"lastName": "Garfiled",
"emails": [
{
"email": "andrewexp@exp.com",
"probability": 99,
"isVerified": null,
"jobStatus": "any",
"domainType": "linkedin_email",
"isValidFormat": null,
"isDisposable": null,
"isWebmail": null,
"isGibberish": null,
"smtpStatus": null
}
]
},
{
"id": "f20d30219b039d1408d837a748a1e2ab843c97e65080f6cf8fa7d948477d9093d87413f05f",
"name": "John Doe",
"firstName": "John",
"lastName": "Doe",
"emails": [
{
"email": "johndoe@gmail.com",
"probability": 99,
"isVerified": null,
"jobStatus": "any",
"domainType": "linkedin_email",
"isValidFormat": true,
"isDisposable": false,
"isWebmail": true,
"isGibberish": false,
"smtpStatus": 3
}
]
}
]
}
list | Una matriz con información sobre la lista y los prospectos en ella. |
name | El nombre de la lista. |
contacts | El número de prospectos en la lista. |
creation_date | La fecha de creación de la lista (incluye la fecha, la hora y la información de la zona horaria). |
emailsCount | El número de correos electrónicos de la lista. |
prospects | Una lista de prospectos en la lista. |
id | Un identificador único del prospecto. |
name | El nombre completo de un prospecto. |
emails | Una lista de correos electrónicos pertenecientes al prospecto. |
POSTCrear una nueva lista de prospectos
GratisUtiliza este método para crear nuevas listas de prospectos en tu cuenta.
| POST | https://api.snov.io/v1/lists |
name | El nombre de la nueva lista de prospectos. |
<?php function createNewList() { $token = getAccessToken(); $params = [ 'access_token' => $token, 'name' => 'New list' ]; $options = [ CURLOPT_URL => 'https://api.snov.io/v1/lists', CURLOPT_POST => true, CURLOPT_POSTFIELDS => $params, CURLOPT_RETURNTRANSFER => true, CURLOPT_FOLLOWLOCATION => true, ]; $ch = curl_init(); curl_setopt_array($ch, $options); $res = json_decode(curl_exec($ch), true); curl_close($ch); } ?>
def add_prospect_list(): token = get_access_token() params = { 'access_token':token, 'name':'New list' } res = requests.post('https://api.snov.io/v1/lists', data=params) return json.loads(res.text)
[
{
"success": true,
"data": {
"id": 1234567
}
}
]
id | El ID de la lista de prospectos creada. |
GETObtener lista de pipelines
GratisEste método muestra una lista de todos los pipelines de la sección CRM (Negocios), incluyendo el número y el valor total de los negocios en cada pipeline.
| GET | https://api.snov.io/v2/pipelines |
| Este método no tiene parámetros de entrada. |
<?php function getUserPipelines() { $token = getAccessToken(); $options = [ CURLOPT_URL => 'https://api.snov.io/v2/pipelines', CURLOPT_RETURNTRANSFER => true, CURLOPT_FOLLOWLOCATION => true, CURLOPT_HTTPHEADER => [ 'Authorization: Bearer ' . $token, 'Content-Type: application/json', ], ]; $ch = curl_init(); curl_setopt_array($ch, $options); $res = json_decode(curl_exec($ch), true); curl_close($ch); return $res; } ?>
def get_user_pipelines(): token = get_access_token() headers = { 'Authorization': 'Bearer ' + token, 'Content-Type': 'application/json' } res = requests.get('https://api.snov.io/v2/pipelines', headers=headers) return json.loads(res.text)
{
"data": [
{
"id": 1106350,
"name": "Test pipeline",
"deals_count": 65,
"deals_value": 1241600,
"created_at": "2022-05-27T00:00:00Z"
},
{
"id": 524548,
"name": "Pipeline",
"deals_count": 0,
"deals_value": 0,
"created_at": "2022-01-10T00:00:00Z"
}
]
}
id | Identificador único del pipeline. |
name | Nombre del pipeline. |
deals_count | Número de negocios actualmente en el pipeline. |
deals_value | Valor total de todos los negocios en el pipeline. |
created_at | Fecha y hora de creación del pipeline en formato ISO 8601. |
GETObtener lista de etapas del pipeline
GratisEste método muestra una lista de todas las etapas dentro de un pipeline específico de la sección CRM (Negocios).
| GET | https://api.snov.io/v2/pipelines/{pipeline_id}/stages |
pipeline_id | Identificador único del pipeline cuyas etapas quieres obtener. |
<?php function getPipelineStages($pipelineId) { $token = getAccessToken(); $options = [ CURLOPT_URL => 'https://api.snov.io/v2/pipelines/' . $pipelineId . '/stages', CURLOPT_RETURNTRANSFER => true, CURLOPT_FOLLOWLOCATION => true, CURLOPT_HTTPHEADER => [ 'Authorization: Bearer ' . $token, 'Content-Type: application/json', ], ]; $ch = curl_init(); curl_setopt_array($ch, $options); $res = json_decode(curl_exec($ch), true); curl_close($ch); return $res; } ?>
def get_pipeline_stages(pipeline_id): token = get_access_token() headers = { 'Authorization': 'Bearer ' + token, 'Content-Type': 'application/json' } res = requests.get( f'https://api.snov.io/v2/pipelines/{pipeline_id}/stages', headers=headers ) return json.loads(res.text)
{
"data": [
{
"id": 10001,
"pipeline_id": 1106350,
"name": "Lead in",
"order": 1,
"deals_count": 54,
"deals_value": 1011
},
{
"id": 10002,
"pipeline_id": 1106350,
"name": "Contact made",
"order": 2,
"deals_count": 4,
"deals_value": 2108
}
]
}
id | Identificador único de la etapa. |
pipeline_id | ID del pipeline al que pertenece esta etapa. |
name | Nombre de la etapa. |
order | Posición de la etapa dentro del pipeline. |
deals_count | Número de negocios actualmente en esta etapa. |
deals_value | Valor total de todos los negocios en esta etapa. |
GETConsulta el saldo del usuario
GratisUtiliza este método para comprobar tu saldo de crédito.
| GET | https://api.snov.io/v1/get-balance |
| No hay parámetros de entrada para este método |
<?php function getBalance() { $token = getAccessToken(); $params = [ 'access_token' => $token, ]; $params = http_build_query($params); $options = [ CURLOPT_URL => 'https://api.snov.io/v1/get-balance?'.$params, CURLOPT_RETURNTRANSFER => true, CURLOPT_FOLLOWLOCATION => true ]; $ch = curl_init(); curl_setopt_array($ch, $options); $res = json_decode(curl_exec($ch), true); curl_close($ch); return $res; } ?>
def get_balance(): token = get_access_token() headers = {'authorization':token } res = requests.get('https://api.snov.io/v1/get-balance', headers=headers) return json.loads(res.text)
{
"success": true,
"data": {
"balance": "25000.00",
"teamwork": false,
"unique_recipients_used": 0,
"limit_resets_in": 29,
"expires_in": 359
}
}
balance | Saldo actual del usuario en créditos. |
teamwork | Es verdadero si actualmente es miembro o líder de un equipo, falso si no forma parte de un equipo. |
recipients_used | Número de destinatarios únicos utilizados este mes. |
limit_resets_in | Días hasta el reinicio del límite. |
expires_in | Días hasta el final de la suscripción. |
Webhooks
Los webhooks le permiten recibir notificaciones de eventos que sucedieron en su cuenta de Snov.io.
Puede usar webhooks para llamar al punto final (URL) en su servidor cada vez que ocurre un evento suscrito en Snov.io y enviar datos en tiempo real a su aplicación.
Cada vez que ocurre un evento, Snov.io envía una solicitud HTTP con un cuerpo JSON al punto final de URL especificado.
Puedes suscribirte y gestionar los webhooks a través de un conjunto de llamadas a la API.
Los objetos y acciones de webhook admitidos actualmente se enumeran a continuación:
| Objeto de webhook | Acción | cuando se activa |
|---|---|---|
campaign_email | sent | Cuando se envía cualquier email al destinatario en cualquier campaña |
| first_sent | Cuando se envía el primer email al destinatario en cualquier campaña | |
| opened | Cuando un destinatario abre cualquier email de cualquier campaña | |
| bounced | Cuando un correo de campaña rebota | |
| link_clicked | Cuando un destinatario hizo clic en un enlace en un correo electrónico de campaña | |
campaign_reply | received | Cuando el destinatario responde a cualquier correo electrónico de cualquiera de las campañas |
| first_received | Cuando el destinatario responde al correo electrónico por primera vez en cualquiera de las campañas | |
| autoreply_received | Cuando recibes una respuesta automática a un correo electrónico de campaña | |
campaign_li_reply | received | Cuando el destinatario envía una respuesta posterior por LinkedIn — a una solicitud de conexión, a un mensaje directo o a un InMail — en cualquiera de las campañas |
| first_received | Cuando el destinatario envía su primera respuesta por LinkedIn — a una solicitud de conexión, a un mensaje directo o a un InMail — en cualquiera de las campañas | |
campaign_li | connection_request_accepted | Cuando el destinatario acepta una solicitud de conexión de LinkedIn enviada desde una campaña |
company | found_domains_by_names | Cuando solicitas el dominio de una empresa basado en su nombre |
prospect | found_by_li_url | Cuando solicitas la información del perfil de un posible cliente basada en su URL de LinkedIn |
| found_emails_by_name_by_domain | Cuando buscas el email de un prospecto | |
| campaign_finished | Cuando una campaña se completa para un destinatario (estado: Finalizado) | |
| campaign_unsubscribed | Cuando un destinatario de campaña se dio de baja de tus correos electrónicos | |
email_verification | verified | Cuando solicitas la verificación de emails |
Límites: los usuarios del plan premium pueden crear hasta 50 webhooks.
Política de reintento: el webhook tiene éxito si recibimos un estado HTTP del rango 200-299 en respuesta dentro de los 3 segundos.
Si obtenemos cualquier otro estado HTTP o se produce un tiempo de espera, hacemos siete intentos de reintento con intervalos crecientes hasta 38 horas después del evento que dispararó un webhook:
Si todos los reintentos son infructuosos, el webhook se desactiva.
- 1º: inmediatamente después del evento
- 2º: 20 minutos después del último intento (20 minutos después del evento
- 3º: 40 minutos después del último intento (1 hora después del evento)
- 4º: 60 minutos después del último intento (2 horas después del evento)
- 5º: 4 horas después del último intento (6 horas después del evento)
- 6º: 8 horas después del último intento (14 horas después del evento)
- 7º: 24 horas después del último intento (38 horas después del evento)
GETListar todos los webhooks
| GET | https://api.snov.io/v2/webhooks |
Content-Type: application/json |
| Este método no tiene parámetros de entrada. |
{
"data": [
{
"data": {
"id": 8,
"end_point": "https://hooks.yourdomain.com/hooks/catch/1237321/awwwcz/",
"event_object": "campaign_email",
"event_action": "sent",
"status": "active",
"created_at": 1655847444
}
},
{
"data": {
"id": 14,
"end_point": "https://hooks.yourdomain.com/hooks/catch/1237321/abqqqpcz/",
"event_object": "campaign_email",
"event_action": "sent",
"status": "deactivated",
"created_at": 1655890563
}
},
{
"data": {
"id": 17,
"end_point": "https://hooks.yourdomain.com/hooks/catch/1237321/abwfpcz/",
"event_object": "campaign_email",
"event_action": "sent",
"status": "active",
"created_at": 1656057947
}
}
],
"meta": {
"webhooks_count": 3,
"user_id": 1313777
}
}
| Parámetro | Tipo de datos | Tipo de datos |
|---|---|---|
data | array | Colección de modelos de webhook |
id | int | Webhook ID |
end_point | string | La URL real que proporcionó al agregar el webhook y adónde se enviará |
event_object | string | El objeto sobre el que se realiza la acción. |
event_action | string | Acción sobre el objeto |
created_at | int | Fecha de creación del webhook en formato Unix Timestamp |
status | string | Estado del webhook: activo, desactivado |
meta | object | Datos relacionados |
webhooks_count | int | Número total de webhooks en su cuenta (máximo 50) |
user_id | int | Tu identificación de usuario |
POSTAgregar webhook
| POST | https://api.snov.io/v2/webhooks |
Content-Type: application/json |
event_object | el objeto en el que se realiza la acción (lista de objetos admitidos) |
event_action | la acción realizada sobre el objeto (lista de acciones admitidas) |
endpoint_url | la dirección URL donde se envía el webhook |
{
"event_object": "campaign_email",
"event_action": "sent",
"endpoint_url": "https://hooks.yourdomain.com/hooks/catch/1237321/abwfpcz/"
}
{
"data": {
"id": 17,
"end_point": "https://hooks.yourdomain.com/hooks/catch/1237321/abwfpcz/",
"event_object": "campaign_email",
"event_action": "sent",
"created_at": 1656057947,
"status": "active"
},
"meta": {
"user_id": 1313777
}
}
| Parámetro | Tipo de datos | Tipo de datos |
|---|---|---|
data | object | datos de webhook |
id | int | Webhook ID |
end_point | string | La URL real que proporcionó al agregar el webhook y adónde se enviará |
event_object | string | El objeto sobre el que se realiza la acción. |
event_action | string | Acción sobre el objeto |
created_at | int | Fecha de creación del webhook en formato Unix Timestamp |
status | string | Estado del webhook: activo, desactivado |
meta | object | Datos relacionados |
user_id | int | Tu identificación de usuario |
PUTCambiar el estado del webhook
Incluye el valor de "id" único del webhook elegido al final de la dirección URL de la solicitud.
Utiliza el método "Lista de todos los webhooks" para obtener los valores de identificación de tus webhooks.
| PUT | https://api.snov.io/v2/webhooks/webhook_id |
Content-Type: application/json |
status | Activo o desactivado |
{
https://api.snov.io/v2/webhooks/14
"status": "deactivated"
}
{
"data": {
"id": 14,
"end_point": "https://hooks.yourdomain.com/hooks/catch/1237321/abqqqpcz/",
"event_object": "campaign_email",
"event_action": "sent",
"created_at": 1655890563,
"status": "deactivated"
},
"meta": {
"user_id": 1313777
}
}
| Parámetro | Tipo de datos | Tipo de datos |
|---|---|---|
data | object | datos de webhook |
id | int | Webhook ID |
end_point | string | La URL real que proporcionó al agregar el webhook y adónde se enviará |
event_object | string | El objeto sobre el que se realiza la acción. |
event_action | string | Acción sobre el objeto |
created_at | int | Fecha de creación del webhook en formato Unix Timestamp |
status | string | Estado del webhook: activo, desactivado |
meta | object | Datos relacionados |
user_id | int | Tu identificación de usuario |
DELETEEliminar un webhook
Incluye el valor de "id" único del webhook elegido al final de la dirección URL de la solicitud.
Utiliza el método "Lista de todos los webhooks" para obtener los valores de identificación de tus webhooks.
| DELETE | https://api.snov.io/v2/webhooks/webhook_id |
Content-Type: application/json |
{
https://api.snov.io/v2/webhooks/8
}
{
"data": {
"success": true
}
}
| Parámetro | Tipo de datos | Tipo de datos |
|---|---|---|
success | boolean | Indica si se elimina el webhook |