Snov.io API
用户可以通过我们简单的 REST API 使用 Snov.io 功能。 与 Snov.io API 集成以同步您的潜在客户、查找邮箱地址、管理潜在客户等。 API 速率限制为每分钟 60 个请求。
如果您使用的是免费套餐,可与我们预约个人演示以申请测试权限。开始前请告知您的具体目标,以便我们更好地理解您的需求。
Snov.io 的 API 用例
- 丰富您的潜在客户列表,扩展销售团队数据
根据姓名或公司域名查找真实邮箱地址 —— 非常适合扩展潜在客户列表或丰富现有数据。 - 自动将新注册用户加入到营销活动中
将您的注册和活动注册表单与 Snov.io API 连接起来,即可实时将新的潜在客户添加到您的营销活动中。 - 保持客户数据库整洁
将邮箱验证功能接入到您的客户关系管理(CRM)或客户开发工具中,以便即时验证新潜在客户的邮箱地址,确保现有客户数据始终有效。 - 使用领英 URL 自动填写潜在客户信息
将基本的领英会员 URL 转换为丰富的、可直接用于 CRM 的个人资料。告别手动数据输入 —— 迎接高质量潜在客户。 - 实时分享营销结果
从您的营销中提取实时数据,导入精美仪表板或幻灯片中。为您的利益相关者提供他们需要的分析,且无需繁琐的操作。 - 遵守“禁止发送邮件”列表相关规定
自动将潜在客户添加到禁止发送邮件列表,避免意外触达。非常适合销售团队保持一致,尊重退订请求,并遵守数据隐私规则。
将这些方法 —— 以及更多 —— 集成到您的工作流程中。借助我们灵活的 API,几乎可以实现无限的应用场景。
认证
您需要生成访问口令以认证未来的请求。发出请求时,请在“授权”字段中指定此访问口令。
| Authorization: Bearer QSlHffXmCAILIOHNGXToq4LsP2yX64VQhEBZ7Ei4 |
这是口令生成的示例。
| POST | https://api.snov.io/v1/oauth/access_token |
grant_type | 将始终是 client_credentials |
client_id | 您的 ID 在帐户设置中可用 https://app.snov.io/account/api |
client_secret | 您的密钥在帐户设置中可用 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 | 您的新访问口令 |
token_type | 将始终是 Bearer |
expires_in | 口令到期时间(秒) |
API 方法
POST域名搜索
每个唯一搜索请求需消耗 1 个点数,每个潜在客户资料邮箱地址需消耗 1 个点数输入域名,Snov.io 将提供公司信息、邮箱地址和潜在客户资料。
每个 POST 请求需消耗 1 个点数。如果没有结果,则不会扣除您的额度。
| POST | https://api.snov.io/v2/domain-search/start |
domain | 您想获取公司信息的域名。例如,“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 | 您正在检索公司信息的域名。 |
task_hash | 您启动的搜索任务的唯一 ID。它会自动添加到您的下一次请求 URL 中,以便接收结果。 |
result | 用于接收公司信息的请求 URL。 |
| 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 | 与域名相关的公司名称。 |
city | 公司总部所在城市。 |
founded | 公司成立年份。 |
website | 公司网站地址。 |
hq_phone | 公司总部的电话号码。 |
industry | 公司所在行业。 |
size | 公司员工数量。 |
related_domains | 与您请求数据的域名具有相同 SLD (二级域名) 的域名。 |
domain | API 已提供公司信息的域名。 |
task_hash | 您启动搜索任务的唯一 ID。 |
prospects_count | 从您的请求中检索到的潜在客户资料数量。 |
emails_count | 从您的请求中检索到的域名邮箱地址数量。 |
generic_contacts_count | 从您的请求中检索到的通用邮箱地址数量。 |
prospects | 请求包含完整潜在客户资料的列表的 URL。 |
domain_emails | 请求包含域名邮箱地址的列表的 URL。 |
generic_contacts | 请求包含通用公司邮箱地址的列表的 URL。 |
status | 请求状态。可以是已完成或进行中。 |
| POST | https://api.snov.io/v2/domain-search/prospects/start |
domain | 您要查找潜在客户资料的域名。例如,“snov.io”。 |
positions[] | 使用此参数可按职位筛选潜在客户,例如“软件开发人员”。要按多个职位进行筛选,请输入包含所需职位的数组,并以逗号分隔。 每次搜索请求最多可以筛选 10 个职位。 |
page | 包含潜在客户资料的页码。每页最多显示 20 个资料。 如果未指定页码,则默认返回第一页。 |
<?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 | 您正在检索潜在客户资料的域名。 |
tab | 显示您请求的结果类型。 prospects表示您正在查找潜在客户资料。 emails显示域名邮箱地址。 service显示您正在获取通用邮箱地址。 |
task_hash | 您启动的搜索任务的唯一 ID。它会自动添加到您的下一次请求 URL 中,以便接收结果。 |
page | 包含潜在客户资料的页码。每页最多显示 20 个资料。 |
positions | 用于筛选结果的职位信息。 |
result | 用于接收潜在客户资料的请求 URL。 |
| 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 | 潜在客户的名字。 |
last_name | 潜在客户的姓氏。 |
position | 潜在客户的职位。 |
source_page | 检索到的个人数据的源页面。 |
search_emails_start | 用于您下一次搜索潜在客户邮箱地址的请求 URL。 |
domain | 您正在检索潜在客户资料的域名。 |
tab | 显示您获得的结果类型。 prospects表示您正在查找潜在客户资料。 emails显示域名邮箱地址。 service显示您正在获取通用邮箱地址。 |
task_hash | 您启动搜索任务的唯一 ID。 |
page | 包含潜在客户资料的页码。每页最多显示 20 个资料。 |
positions | 用于筛选结果的职位信息。 |
total_count | 找到的潜在客户资料总数。 |
next | 用于您检索下一页结果的请求 URL。每页最多包含 20 个潜在客户。 |
status | 请求状态。可以是已完成或进行中。 |
| 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。 |
result | 用于您下次请求检索潜在客户邮箱地址的 URL。 |
| 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 | 搜索邮箱地址的日期。 |
emails | 潜在客户邮箱地址。 |
smtp_status | 可返回有效或未知 (又称无法验证)。您可以在此处了解有关邮箱地址状态的更多信息。 |
task_hash | 您启动搜索任务的唯一 ID。 |
status | 请求状态。可以是已完成或进行中。 |
| POST | https://api.snov.io/v2/domain-search/domain-emails/start |
domain | 您要查找其域名邮箱地址的公司域名。例如,“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 | 您正在检索邮箱地址的域名。 |
tab | 显示您请求的结果类型。 prospects表示您正在查找潜在客户资料。 emails显示域名邮箱地址。 service显示您正在获取通用邮箱地址。 |
task_hash | 您启动的搜索任务的唯一 ID。它会自动添加到您的下一次请求 URL 中,以便接收结果。 |
next | 下一个页面请求的 ID (如果有的话)。如果没有更多页面可用,则此字段将为空。 |
result | 用于接收域名邮箱地址的请求 URL。 |
| 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 | 域名邮箱地址: 请注意,这些邮箱地址未经验证。要验证它们,请使用邮箱地址验证工具。 |
domain | 您正在检索邮箱地址的域名。 |
tab | 显示您获得的结果类型。 prospects表示您正在查找潜在客户资料。 emails显示域名邮箱地址。 service显示您正在获取通用邮箱地址。 |
task_hash | 您启动搜索任务的唯一 ID。 |
next | 将 ID 添加到请求 URL 中,以便访问下一页邮箱地址 (如果存在的话)。 |
total_count | 找到的域名邮箱地址总数。 |
next | 用于检索下一页结果(如果存在)的请求 URL。每页最多包含 50 个邮箱地址。 |
status | 请求状态。可以是已完成或进行中。 |
| POST | https://api.snov.io/v2/domain-search/generic-contacts/start |
domain | 您要查找通用邮箱地址的公司域名。例如,“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 | 您正在检索通用邮箱地址的域名。 |
tab | 显示您请求的结果类型。 prospects表示您正在查找潜在客户资料。 emails显示域名邮箱地址。 service显示您正在获取通用邮箱地址。 |
task_hash | 您启动的搜索任务的唯一 ID。它会自动添加到您的下一次请求 URL 中,以便接收结果。 |
next | 下一个页面请求的 ID (如果有的话)。如果没有更多页面可用,则此字段将为空。 |
result | 用于接收通用邮箱地址的请求 URL。 |
| 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 | 通用联系人的邮箱地址: 请注意,这些邮箱地址未经验证。要验证它们,请使用邮箱地址验证工具。 |
domain | 您正在检索通用邮箱地址的域名。 |
tab | 显示您获得的结果类型。 prospects表示您正在查找潜在客户资料。 emails显示域名邮箱地址。 service显示您正在获取通用邮箱地址。 |
task_hash | 您启动搜索任务的唯一 ID。 |
next | 将 ID 添加到请求 URL 中,以便访问下一页邮箱地址 (如果存在的话)。 |
total_count | 在该域名下找到的通用邮箱地址总数。 |
next | 用于检索下一页结果(如果存在)的请求 URL。每页最多包含 50 个邮箱地址。 |
status | 请求状态。可以是已完成或进行中。 |
POST检查可用邮箱数量
免费使用此 API 方法,您可以在我们的数据库中了解来自某个域名的邮箱地址数量。它完全免费,因此您不需要任何信用点数!
| POST | https://api.snov.io/v1/get-domain-emails-count |
domain | 您想知道我们数据库中邮箱地址数量的域名的名称。 |
<?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 | 您想知道我们数据库中邮箱地址数量的域名的名称。 |
webmail | 是 true 如果您正在搜索的域名是webmail。 |
result | 我们已找到该域的电子邮箱地址总数。我们无法提供网络邮件域的结果,因此网络邮件的结果将始终是 0
. |
POST根据姓名和域名查找邮箱
每个有效或未知状态的邮箱地址均需消耗 1 个点数。输入潜在客户的姓名和公司域名,Snov.io 将返回其经过验证的邮箱地址。
| POST | https://api.snov.io/v2/emails-by-domain-by-name/start |
发送此请求的最简单方法是通过原始 JSON 主体。如果您更喜欢使用参数,这里有一个示例
rows | 包含潜在客户详细信息(名字、姓氏和域名)的对象数组。 每个请求最多可以包含 10 个对象。 |
first_name | 潜在客户的名字。 |
last_name | 潜在客户的姓氏。 |
domain | 潜在客户所在公司的域名。 |
webhook_url | 输入您的 Webhook URL,以便即时接收结果,而无需查询任务队列(不依赖 hash task)。 |
<?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。 |
first_name | 潜在客户的名字。 |
last_name | 潜在客户的姓氏。 |
domain | 潜在客户所在公司的域名。 |
| GET | https://api.snov.io/v2/emails-by-domain-by-name/result |
task_hash | 您从上一个请求中收到的唯一请求 ID。 |
<?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 | 请求的状态。可能是completed或in_progress。 如果用于搜索的账户没有足够的点数,您可能会收到 not_enough_credits 状态。 |
people | 潜在客户的全名。 |
email | 潜在客户的邮箱地址。 |
smtp_status | 可能会返回 valid 或 unknown(即无法验证)。 要了解未知状态的原因,请检查unknown_status_reason参数。 |
is_valid_format | 显示邮箱格式是否有效。可能的值为 false 或 true。 |
is_disposable | 指示邮箱是否为临时或一次性,返回值为false或true。 |
is_webmail | 如果返回值为true,则表示您正在搜索的邮箱是 Webmail。 |
is_gibberish | 显示所提供的邮箱地址是否包含随机或无意义的字符。可能返回的值为 false 或 true。 |
unknown_status_reason | 如果经过验证的邮箱具有未知的 smtp_status,您可以在此找到更详细的原因。 Banned:高送达风险 —— 此邮箱地址无法 100% 确认其有效性。 Catchall:发件人声誉风险 —— 该邮箱为全接收邮箱。 Connection_error:可能存在退信风险 —— 收件方存在技术问题。 Greylist: 送达风险 —— 该邮件服务器使用灰名单过滤器。 |
domain | 潜在客户所在公司的域名。 |
first_name | 潜在客户的名字。 |
last_name | 潜在客户的姓氏。 |
task_hash | 此搜索任务的唯一 ID。 |
POST根据公司名称查找域名
每找到 1 个域名地址需消耗 1 个点数输入公司名称,Snov.io 将返回其域名地址。
| POST | https://api.snov.io/v2/company-domain-by-name/start |
names[] | 您希望获取域名的公司名称数组。 要检索多个公司的域名,请将每个公司作为单独参数添加。例如: names[] | Snov.io names[] | Sendpulse 您最多可以同时提供 10 个公司名称。 |
webhook_url | 输入您的 Webhook URL,以便即时接收结果,而无需查询任务队列(不依赖 hash task)。 |
<?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。 |
names | 您提供的公司名称数组。 |
| GET | https://api.snov.io/v2/company-domain-by-name/result?task_hash={hash_from_1} |
task_hash | 您从上一个请求中收到的唯一请求 ID。 |
<?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 | 请求的状态。可能是completed或in_progress。 |
name | 您请求域名地址的公司名称。 |
domain | 公司域名。 |
names | 您提供的公司名称数组。 |
task_hash | 此搜索任务的唯一 ID。 |
POST从 URL 获取领英个人资料信息
每提供 1 个潜在客户的个人资料信息需消耗 1 个点数输入领英会员的 URL,Snov.io 将检索其完整的个人资料信息。
| POST | https://api.snov.io/v2/li-profiles-by-urls/start |
urls[] | 您希望获取完整个人资料信息的领英个人资料 URL 数组。 要同时检索多个领英会员的个人资料信息,请将每个 URL 作为单独的参数添加。 您最多可以同时提供 10 个领英 URL。 |
webhook_url | 输入您的 Webhook URL,以便即时接收结果,而无需查询任务队列(不依赖 hash task)。 |
<?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。 |
urls | 您正在请求信息的个人资料 URL。 |
| GET | https://api.snov.io/v2/li-profiles-by-urls/result |
task_hash | 您从上一个请求中收到的唯一请求 ID。 |
<?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 | 请求的状态。可能是completed或in_progress。 |
url | 领英个人资料的 URL。 |
name | 潜在客户的全名。 |
first_name | 潜在客户的名字。 |
last_name | 潜在客户的姓氏。 |
industry | 潜在客户的工作领域。 |
location | 潜在客户的位置。 |
country | 根据领英个人资料显示的潜在客户所在国家/地区。 |
skills | 潜在客户的技能。 |
positions | 潜在客户当前担任的职位数组。 |
name | 潜在客户所在公司的名称。 |
title | 潜在客户的职位。 |
linkedin_url | 公司领英页面的链接。 |
url | 公司的网站地址。 |
industry | 公司所在行业。 |
country | 公司总部所在的国家/地区。 |
location | 公司的位置。 |
specializations | 公司的专业或重点领域。 |
urls | 您提供的领英个人资料 URL 数组。 |
task_hash | 此搜索任务的唯一 ID。 |
POST通过邮箱地址丰富个人资料
每个请求 1 个信用点数提供一个邮箱地址,Snov.io 将从数据库中返回连接到提供的邮箱地址所有者的所有配置文件信息。
如果我们在数据库中找不到有关邮箱地址所有者的信息,则不会向您收取该请求的费用。
| POST | https://api.snov.io/v1/get-profile-by-email |
email | 您想要查找其他信息的人的邮箱地址。 |
<?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 | 唯一的配置文件标识符。 |
source | 检索到的个人数据的来源。 |
name | 邮箱地址所有者的全名。 |
firstName | 此人的名字。 |
lastName | 此人的姓氏。 |
logo | 此人的资料照片。 |
industry | 来源中显示的此人所在行业。 |
country | 来源中显示的此人所在国家/地区。 |
locality | 来源中显示的此人所在地点。 |
social | 到此人社交资料链接。 |
currentJobs | 包含有关此人当前工作职位信息的数组。 |
previousJobs | 一个包含有关此人以前工作职位信息的数组。 |
lastUpdateDate | 数据库中最后一份资料的更新日期。 |
POST邮箱地址验证工具
输入邮箱地址,Snov.io 将运行完整的验证检查。您最多可以同时验证 10 个邮箱地址。提供邮箱地址
| POST | https://api.snov.io/v2/email-verification/start |
emails[] | 您要验证的邮箱地址。 要同时验证多个邮箱地址,请将每个邮箱地址作为单独参数添加。例如: emails[] | help@snov.io emails[] | partnerships@snov.io 您最多可以同时验证10 个邮箱地址。 |
webhook_url | 输入您的 Webhook URL,以便即时接收结果,而无需查询任务队列(不依赖 hash task)。 |
<?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。 |
emails | 您提供的用于验证的邮箱地址数组。 |
| GET | https://api.snov.io/v2/email-verification/result |
task_hash | 您从上一个请求中收到的唯一请求 ID。 |
<?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 | 请求的状态。可能是completed或in_progress。 |
email | 您正在验证的电子邮箱地址。 |
smtp_status | 可能返回valid、not_valid或unknown(即无法验证)。 要了解未知状态的原因,请检查unknown_status_reason参数。 |
is_valid_format | 显示邮箱格式是否有效。可能的值为 false 或 true。 |
is_disposable | 指示邮箱是否为临时或一次性,返回值为false或true。 |
is_webmail | 如果返回值为true,则表示您正在搜索的邮箱是 Webmail。 |
is_gibberish | 显示所提供的邮箱地址是否包含随机或无意义的字符。可能返回的值为 false 或 true。 |
unknown_status_reason | 如果经过验证的邮箱具有未知的 smtp_status,您可以在此找到更详细的原因。 Banned:高送达风险 —— 此邮箱地址无法 100% 确认其有效性。 Catchall:发件人声誉风险 —— 该邮箱为全接收邮箱。 Connection_error:可能存在退信风险 —— 收件方存在技术问题。 Greylist: 送达风险 —— 该邮件服务器使用灰名单过滤器。 Hidden_by_owner: 邮箱所有者或拥有该域名的公司要求其从 Snov.io 结果中删除。 |
emails | 您正在验证的邮箱数组。 |
task_hash | 该验证任务的唯一请求 ID。 |
POST添加新邮箱账户
此方法将一个新的 SMTP/IMAP 邮箱账户连接到您的 snov.io 工作区,以便将其用作营销活动中的发件人。即使 SMTP/IMAP 连接检查尚未完成,账户也会被创建——连接状态会以异步方式在 smtp.status / imap.status 字段中返回,之后可进行轮询。仅支持 SMTP/IMAP 账户(other 提供商类型);Gmail 和 Microsoft 的 OAuth 流程不在支持范围内。
| POST | https://api.snov.io/v2/sender-accounts/emails |
sender_name *必需 | 发件人显示名称,最多 100 个字符。 |
email_from *必需 | 发件人邮箱地址。 |
password *必需 | SMTP/IMAP 账户的密码或应用专用密码。加密存储。 |
smtp *必需 | 包含 SMTP 设置的对象。 |
smtp.host *必需 | SMTP 主机,例如 smtp.gmail.com。 |
smtp.port *必需 | SMTP 端口。允许的值:25、465、587。 |
smtp.encryption *必需 | 加密类型。允许的值:ssl、tls、none。必须与端口匹配:465 → ssl,587 → tls,25 → none。 |
imap | 包含 IMAP 设置的对象。可选,但如果提供,则所有子字段均为必填。 |
imap.host | IMAP 主机,例如 imap.gmail.com。当存在 imap 时为必填。 |
imap.port | IMAP 端口。允许的值:143、993。当存在 imap 时为必填。 |
imap.encryption | 加密类型。允许的值:ssl、tls、none。必须与端口匹配:993 → ssl 或 tls,143 → none。当存在 imap 时为必填。 |
reply_to | reply-to 邮箱地址。 |
limitation | 每日发送限制。整数,最小 1,最大 1200。默认值:50。不得超过账户在配置的延迟下 24 小时内可发送的最大邮件数量。 |
delay_type | 邮件之间的延迟类型。允许的值:fixed、random。默认值:random。 |
delay_fixed | 固定延迟(秒)(当 delay_type=fixed 时使用)。整数,最小 5,最大 3600。默认值:600。 |
delay_from | 最小延迟(秒)(当 delay_type=random 时使用)。整数,最小 5,最大 3600。默认值:600。 |
delay_to | 最大延迟(秒)(当 delay_type=random 时使用)。整数,最小 5,最大 3600,必须大于 delay_from。默认值:900。 |
signature | 附加到发出邮件的 HTML 签名。 |
bcc_email | BCC 邮箱地址。 |
tags | 字符串数组。已存在的标签按名称匹配,新标签会被创建并附加到账户。 |
timezoneId | 账户时区的整数 ID。最小 1,最大 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。 |
data.sender_name | 发件人显示名称。 |
data.email_from | 发件人邮箱地址。 |
data.smtp | SMTP 设置:host、port、encryption,以及包含连接检查结果的 status 字段(pending、connected、error)。 |
data.imap | IMAP 设置(仅在配置了 IMAP 时存在):host、port、encryption、status。 |
data.limitation | 每日发送限制。 |
data.delay_type | 延迟类型:fixed 或 random。 |
data.delay_from | 最小延迟(秒)(用于 delay_type=random)。 |
data.delay_to | 最大延迟(秒)(用于 delay_type=random)。 |
data.delay_fixed | 固定延迟(秒)(用于 delay_type=fixed)。 |
data.reply_to | reply-to 邮箱地址。 |
data.signature | HTML 签名(仅在提供时存在)。 |
data.bcc_email | BCC 邮箱地址。 |
data.tags | 附加到账户的标签数组。 |
data.timezoneId | 时区 ID(仅在请求中设置时返回)。 |
data.created_at | 账户创建时间戳。 |
PATCH更新邮箱账户
此方法更新一个现有的 SMTP/IMAP 发件人账户。所有字段均为可选,但至少须提供一个有效字段——仅会更改所提供的字段,其余字段保持不变。当包含任何 SMTP 或 IMAP 字段时,会触发一次新的异步连接检查,并在 smtp.status / imap.status 中返回相应的状态。如果提供了 tags,则新数组将完全替换账户当前的标签列表(替换,而非合并)。
| PATCH | https://api.snov.io/v2/sender-accounts/emails/{id} |
id *必需(path) | 要更新的发件人账户的 ID。 |
sender_name | 新的发件人显示名称,最多 100 个字符。 |
email_from | 新的发件人邮箱地址。 |
password | SMTP/IMAP 账户的新密码或应用专用密码。加密存储。 |
smtp | 包含新 SMTP 设置(host、port、encryption)的对象。当存在 smtp 时,三个子字段均为必填,且必须满足端口/加密配对规则(465 → ssl,587 → tls,25 → none)。 |
smtp.host | SMTP 主机。最多 100 个字符;格式:^[a-zA-Z0-9][a-zA-Z0-9-.]*。当存在 smtp 时为必填。 |
smtp.port | 允许的值:25、465、587。当存在 smtp 时为必填。 |
smtp.encryption | 必须与端口匹配:465 → ssl,587 → tls,25 → none。当存在 smtp 时为必填。 |
imap | 包含新 IMAP 设置(host、port、encryption)的对象。当存在 imap 时,三个子字段均为必填(993 → ssl 或 tls,143 → none) |
imap.host | IMAP 主机。最多 100 个字符。当存在 imap 时为必填。 |
imap.port | 允许的值:143、993。当存在 imap 时为必填。 |
imap.encryption | 必须与端口匹配:993 → ssl 或 tls;143 → none。当存在 imap 时为必填。 |
reply_to | 新的 reply-to 邮箱地址。传入 null 可清除。 |
limitation | 新的每日发送限制。整数,最小 1,最大 1200。不得超过账户在配置的延迟下 24 小时内可发送的最大邮件数量。 |
delay_type | 新的延迟类型。允许的值:fixed、random。 |
delay_fixed | 固定延迟(秒)(当 delay_type=fixed 时使用)。整数,最小 5,最大 3600。 |
delay_from | 最小延迟(秒)(当 delay_type=random 时使用)。整数,最小 5,最大 3600。 |
delay_to | 最大延迟(秒)(当 delay_type=random 时使用)。整数,最小 5,最大 3600,必须大于 delay_from。 |
signature | 新的 HTML 签名。传入 null 可清除。 |
bcc_email | 新的 BCC 邮箱地址。传入 null 可清除。 |
tags | 新的标签数组。完全替换当前的标签列表。传入 null 可清除所有标签。 |
timezoneId | 账户时区的整数 ID。最小 1,最大 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。 |
data.sender_name | 发件人显示名称。 |
data.email_from | 发件人邮箱地址。 |
data.smtp | SMTP 设置:host、port、encryption,以及包含连接检查结果的 status 字段(pending、valid、invalid)。 |
data.imap | IMAP 设置(仅在配置了 IMAP 时存在):host、port、encryption、status。 |
data.limitation | 每日发送限制。 |
data.delay_type | 延迟类型:fixed 或 random。 |
data.delay_from | 最小延迟(秒)(用于 delay_type=random)。 |
data.delay_to | 最大延迟(秒)(用于 delay_type=random)。 |
data.delay_fixed | 固定延迟(秒)(用于 delay_type=fixed)。 |
data.reply_to | reply-to 邮箱地址。 |
data.signature | HTML 签名(仅在提供时存在)。 |
data.bcc_email | BCC 邮箱地址。 |
data.tags | 附加到账户的标签数组。 |
data.timezoneId | 时区 ID(仅在设置时返回)。 |
data.updated_at | 上次更新的时间戳。 |
GET检查发件人 SMTP/IMAP 状态
此方法检查已连接的邮箱发件人账户的 SMTP 以及(可选的)IMAP 连接状态。使用它来验证发件人账户当前是否有效且可正常运行,并获取任何连接错误。
| GET | https://api.snov.io/v2/sender-accounts/check-sender-status |
sender_account_id *必需 | 要检查的发件人邮箱账户的 ID。整数,最小值: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 | 包含发件人账户连接状态详情的对象。 |
smtp | 描述 SMTP 连接状态的对象:status(pending、valid、invalid)和 errors(错误消息数组,当 status 为 invalid 时存在)。 |
imap | 描述 IMAP 连接状态的对象,结构与 smtp 相同。当账户创建时未配置 IMAP,则返回 null。 |
GET获取所有邮箱账户列表
免费该方法显示所有已连接邮箱账户的列表。
| GET | https://api.snov.io/v2/sender-accounts/emails |
| 此方法没有输入参数。 |
<?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。 |
sender_name | 发件人姓名,或"发件人名称"。这是收件人收件箱中显示的发件人名称。 |
email_from | 完整电子邮箱地址。 |
valid | 如果发件人账户有效,则显示 true。账户无效时返回 false。 |
suspended | 如果账户暂停发送,则显示 true。账户正常运行时返回 false。 |
limitation | 账户的每日发送限制。 |
provider | 邮箱账户的服务商。 |
tags | 分配给该账户的标签。 |
imap | 账户的IMAP详情数组。 |
username | 选择用于接收回复的用户名邮箱(替代默认邮箱账户)。 |
valid | 启用IMAP时显示 true。禁用IMAP时返回 false。 |
POST创建预热活动
此方法为指定的电子邮件账户创建并启动一个新的预热活动。预热通过与精选收件人网络交换简短邮件,逐步提升账户的发送声誉。选择progressive策略从较小的起始点逐步增加每日发送量,或选择steady策略每天发送固定数量的预热邮件;提供您自己的subject和body,或让snov.io自动生成。
| POST | https://api.snov.io/v2/warm-up |
email_account_id *必需 | Integer。要预热的电子邮件账户ID。 |
strategy | 发送策略。允许的值:progressive、steady。默认值:progressive。 |
per_day *必需 | Integer。每日发送目标。范围1–1000,取决于定价计划。 |
from | Integer。起始每日发送量(仅限progressive策略)。范围1–5,必须≤ per_day。当strategy=progressive时必填。 |
increase | Integer。每日发送量增量(仅限progressive策略)。范围1–5。当strategy=progressive时必填。 |
email_content | 邮件内容类型。允许的值:autogenerated(AI生成)、specific(自定义)。默认值:autogenerated。 |
subject | String。邮件主题,1–200个字符。当email_content=specific时必填。 |
body | String。邮件正文,1–10000个字符。当email_content=specific时必填。 |
reply_rate | Integer。将收到回复的收件预热邮件百分比。范围10–45。默认值:30。 |
campaign_deadline | String(YYYY-MM-DD)。预热停止的日期。省略则表示无截止日期。 |
providers | 字符串数组。目标收件人提供商。允许的值:gmail、microsoft、aliyun、hostinger、private email、zoho、titan、godaddy、other。 |
send_to_paid_domain | Boolean。是否向付费域名发送。默认值:false。 |
enable_ctd | Boolean。启用自定义跟踪域。默认值:false。 |
enable_proxy | Boolean。启用动态代理。默认值:false。 |
schedule_id | Integer。要附加到预热的发送计划ID。 |
template_name | String。要使用的已保存邮件模板名称。 |
<?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。 |
data.id | 已创建的预热活动ID。 |
GET获取预热活动列表
此方法返回账户中所有预热活动的分页列表,可选择按状态过滤。每个条目的结构与获取预热活动信息的响应相同。
| GET | https://api.snov.io/v2/warm-up |
page | Integer。页码。默认值:1。最小值:1。 |
per_page | Integer。每页结果数。允许的值:20、50、100。默认值:20。 |
status | 按状态过滤。允许的值:active、paused、completed、error。省略则返回全部。 |
<?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。 |
data | 预热活动对象数组。每个条目的结构与获取预热活动信息的响应相同(请参阅那里的data.*字段)。 |
meta.total_items | 所有页面的总条目数。 |
meta.page | 当前页码。 |
meta.per_page | 每页条目数。 |
meta.total_pages | 总页数。 |
GET获取预热活动信息
此方法通过ID返回单个预热活动的完整详情——包括策略设置、每日限制、当前送达率统计和已连接的电子邮件账户。
| GET | https://api.snov.io/v2/warm-up/{id} |
id *必需(path) | Integer。预热活动ID。 |
<?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。 |
data.id | 预热活动ID。 |
data.status | 活动状态:active、pending、paused、completed、error。 |
data.reply_rate | 将被回复的已接收邮件百分比(10–45)。 |
data.send_to_paid_domain | 活动是否向付费域名发送。 |
data.start_date | 活动开始日期(YYYY-MM-DD)。 |
data.campaign_deadline | 活动结束日期(YYYY-MM-DD)。未设置截止日期时为null。 |
data.strategy | 发送策略:progressive或steady。 |
data.per_day | 每日发送目标。 |
data.from | 起始每日发送量(仅限progressive策略)。 |
data.increase | 每日发送量增量(仅限progressive策略)。 |
data.subject | 邮件主题(仅当email_content=specific时)。 |
data.body | 邮件正文(仅当email_content=specific时)。 |
data.template_name | 模板名称。 |
data.enable_ctd | 是否启用自定义跟踪域。 |
data.schedule | 附加到活动的发送计划,或null。 |
data.enable_proxy | 是否启用动态代理。 |
data.sent_today | 今日已发送的预热邮件数。 |
data.daily_limit | 当前应用的每日发送限制。 |
data.total_saved_from_spam | 活动开始以来从垃圾邮件中救回的邮件总数。 |
data.deliverability | 收件箱送达率(%)。 |
data.warm_up_error | 如果预热进入error状态则为错误描述,否则为null。 |
data.email_account | 已连接电子邮件账户的详情。 |
data.email_account.id | 电子邮件账户ID。 |
data.email_account.email_from | 账户的电子邮件地址。 |
data.email_account.type | 账户类型(例如google、microsoft)。 |
data.email_account.delay | 邮件之间的延迟(秒)。 |
data.email_account.limit | 账户的总邮件限制。 |
data.email_account.per_day | 账户的每日限制。 |
data.email_account.schedule_required | 此账户是否需要计划。 |
data.email_account.provider | 邮件提供商:gmail、microsoft、hostinger、zoho、titan、godaddy、other等。 |
data.email_account.custom_tracking_domain | 自定义跟踪域,或null。 |
PATCH更新预热活动
此方法对现有预热活动进行部分更新。只有您传入的字段会被更改;所有其他设置保持不变。使用此方法实时更改活动设置、切换状态(active、paused、completed、deleted),或通过发送make_endless: true来移除截止日期。
| PATCH | https://api.snov.io/v2/warm-up/{id} |
id *必需(path) | Integer。要更新的预热活动ID。 |
status | 手动更改活动状态。允许的值:active、paused、completed、deleted。 |
strategy | 新的发送策略:progressive或steady。 |
per_day | 新的每日发送目标。范围1–1000,取决于定价计划。 |
from | 新的起始每日发送量。范围1–10。当strategy=progressive时必填。 |
increase | 新的每日发送量增量。范围1–5。当strategy=progressive时必填。 |
email_content | 邮件内容类型:autogenerated或specific。 |
subject | 新的邮件主题,1–200个字符。当email_content=specific时必填。 |
body | 新的邮件正文,1–10000个字符。当email_content=specific时必填。 |
reply_rate | 新的回复率百分比。范围10–45。 |
campaign_deadline | 新的活动结束日期(YYYY-MM-DD)。 |
make_endless | Boolean。传入true以移除当前的campaign_deadline并使活动无限期进行。 |
providers | 新的目标收件人提供商(允许的值与创建预热活动相同)。 |
send_to_paid_domain | Boolean。 |
enable_ctd | Boolean。启用或禁用自定义跟踪域。 |
enable_proxy | Boolean。启用或禁用动态代理。 |
schedule_id | 新的发送计划ID。 |
template_name | 新的模板名称。 |
<?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。 |
data.id | 已更新的预热活动ID。 |
DELETE删除预热活动
此方法通过ID删除预热活动。删除后,该活动及其统计数据将无法通过其他预热API方法访问。
| DELETE | https://api.snov.io/v2/warm-up/{id} |
id *必需(path) | Integer。要删除的预热活动ID。 |
<?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。 |
data.id | 已删除的预热活动ID。 |
GET获取预热统计数据
此方法返回预热活动的每日和按提供商分类的送达率统计数据——可以是预设时间窗口(two_weeks/month)或自定义日期范围。适用于监控收件箱率进度并发现预热效果不佳的提供商。
| GET | https://api.snov.io/v2/warm-up/statistics/{id} |
id *必需(path) | Integer。预热活动ID。 |
period | 预设时间段。允许的值:two_weeks、month。未提供date_from/date_to时必填。 |
date_from | String(YYYY-MM-DD)。自定义日期范围的开始日期。未提供period时必填。 |
date_to | String(YYYY-MM-DD)。自定义日期范围的结束日期。必须≥ date_from且≥活动开始日期。未提供period时必填。 |
<?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。 |
data.daily_statistics | 以日期(YYYY-MM-DD)为键的对象。每个值包含以下每日统计字段。 |
data.daily_statistics.{date}.emails_sent | 当天发送的预热邮件数。 |
data.daily_statistics.{date}.replies | 当天收到的回复数。 |
data.daily_statistics.{date}.bounces | 当天退回的邮件数。 |
data.daily_statistics.{date}.spam_emails | 当天进入垃圾邮件的邮件数。 |
data.daily_statistics.{date}.inbox_emails | 当天进入收件箱的邮件数。 |
data.daily_statistics.{date}.categories_emails | 当天进入Gmail分类标签的邮件数。 |
data.daily_statistics.{date}.scheduled | 当天计划发送的邮件数。 |
data.provider_statistics | 以提供商名称(google、outlook、hostinger等)为键的对象。每个值包含以下按提供商分类的统计字段。 |
data.provider_statistics.{provider}.id | 提供商内部ID。 |
data.provider_statistics.{provider}.count | 通过此提供商发送的邮件数。 |
data.provider_statistics.{provider}.spam | 在此提供商中进入垃圾邮件的邮件数。 |
data.provider_statistics.{provider}.percent | 此提供商的收件箱送达率(%)。 |
data.provider_statistics.{provider}.categories | 进入Gmail分类标签的邮件数。不支持分类的提供商可能省略此字段。 |
data.deliverability.inbox.count | 投递到收件箱的邮件总数。 |
data.deliverability.inbox.percent | 收件箱送达率(%)。 |
data.deliverability.spam.count | 投递到垃圾邮件的邮件总数。 |
data.deliverability.spam.percent | 垃圾邮件率(%)。 |
data.deliverability.categories.count | 投递到Gmail分类标签的邮件总数。 |
data.deliverability.categories.percent | 分类率(%)。 |
data.is_calculated | Boolean。统计数据仍在处理中时为false;计算完成时为true。 |
营销活动管理
这些方法允许您创建、配置和控制营销活动的整个生命周期——从初始设置到启动、暂停、完成和删除。
GET查看所有营销
免费此方法显示所有用户营销的列表。如果用户属于某个团队并拥有查看团队记录的权限,则该方法也会返回在该团队中创建的所有营销。
| GET | https://api.snov.io/v1/get-user-campaigns |
| 这个方法没有输入参数 |
<?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 | 用户营销的唯一标识符。 |
campaign | 营销名称。 |
list_id | 营销中使用的潜在客户列表唯一标识符。 |
status | 营销状态。 |
created_at | Unix 时间戳格式的营销创建日期和时间。 |
updated_at | Unix 时间戳格式的最近营销更新日期和时间。 |
started_at | Unix 时间戳格式的营销启动日期和时间。 |
POST创建营销活动
此方法在您的 snov.io 工作区中创建一个新的外联营销活动。活动以 new 状态创建,可以在任何部分配置状态下保存——只有运行活动所需的字段才会被验证为必填项,其余字段可以稍后填写。支持纯邮件、纯 LinkedIn 和混合多渠道序列,包括 A/B 变体、触发器(打开、点击、回复、calendly、连接级别、LinkedIn in-mail 发送等)、延迟和目标块。此方法创建的营销活动在其消息块中没有内容。您之后通过调用 Create Email Step Content 方法来添加内容。
| POST | https://api.snov.io/v2/campaigns/create |
title *必需 | String。营销活动显示名称,最多 255 个字符。 |
priority *必需 | String enum。营销活动发送优先级:low、medium、high。 |
email_accounts *邮件营销活动必填 | Array of integers。要使用的邮件发件人账户 ID 列表。 |
linkedin_accounts | Array of integers。要使用的 LinkedIn 账户 ID 列表。 |
tracking *邮件营销活动必填 | Object。邮件跟踪设置。 |
tracking.open | Boolean。跟踪邮件打开情况。 |
tracking.link_click | Boolean。跟踪邮件中的链接点击情况。 |
sending_settings *邮件营销活动必填 | Object。控制邮件发送方式及跳过哪些收件人。 |
sending_settings.sending_priority | String enum。哪些邮件优先发送:first_email 或 follow_up。 |
sending_settings.daily_sending_all | Integer 或 null。每天向所有收件人发送的最大邮件总数。 |
sending_settings.daily_sending_new_recipients | Integer 或 null。每天联系的最大新收件人数量。 |
sending_settings.skip_unverifiable | Boolean。跳过无法验证邮件的收件人。 |
sending_settings.skip_unverified | Boolean。跳过邮件未经验证的收件人。 |
sending_settings.skip_who_replied | 对已回复的潜在客户停止后续跟进。 |
sending_settings.skip_company_domain_who_replied | Boolean。跳过来自有人回复过的公司域名的收件人。 |
sending_settings.skip_recipients_without_variables_data | Boolean。跳过缺少自定义变量值的收件人。 |
sending_settings.skip_other_recipients_email_addresses | Boolean。如果潜在客户有多个邮箱地址,当值为 true 时仅向第一个邮箱发送。 |
sending_settings.skip_recipients_added_to_my_another_campaign | Boolean。跳过已加入该用户其他营销活动的收件人。 |
sending_settings.skip_recipients_added_to_team_another_campaign | Boolean。跳过已加入任何团队成员其他营销活动的收件人。 |
sending_settings.one_click_unsubscribe | Boolean。在邮件中启用一键退订标头。 |
recipients *必需 | Object。定义谁接收营销活动。 |
recipients.list_id *必需 | Integer。要发送的潜在客户列表 ID。 |
recipients.black_list_id | Integer。禁止发送列表的 ID。请参阅 查看所有免发送电子邮件列表。 |
schedule_id | Integer。发送计划的 ID。请参阅 查看所有时间表。 |
start_campaign_at | String(YYYY-MM-DD HH:MM:SS)或 null。营销活动自动开始的日期时间,例如 2027-03-25 09:00:00。 |
complete_campaign_at | String(YYYY-MM-DD HH:MM:SS)或 null。营销活动自动停止的日期时间。 |
timezone | String。活动时区。支持的时区列表请参阅下方 时区 表。 |
complete_campaign_after_last_step *必需 | Boolean。所有收件人完成最后一个序列步骤后停止营销活动。 |
archive_in_months *必需 | Integer。在此月数后自动归档营销活动。允许值:1、2、3、6。 |
provider_matching *邮件营销活动必填 | Boolean。尽可能将收件人邮件提供商与发件人账户提供商匹配。只有在至少连接了两个邮件账户时才能设置为 true。 |
deals | Object 或 null。由营销活动事件触发的 CRM 商机创建设置。 |
deals.event *提供 deals 时必填 | Array of strings。创建商机的事件:open、click、reply。 |
deals.pipeline_id *提供 deals 时必填 | Integer。在其中创建商机的 CRM 管道 ID。 |
deals.stage_id *提供 deals 时必填 | Integer。放置商机的管道阶段 ID。 |
deals.potential_value | Integer。预计商机价值。 |
deals.currency | String。交易金额的货币代码。支持的货币列表请参阅下方 货币 表。 |
sequence *必需 | Object。营销活动执行的步骤自动化流程。 |
sequence.entry *必需 | String。要执行的第一个步骤的 _ref。 |
sequence.steps *必需 | Array of objects。序列中所有步骤的有序列表。 |
sequence.steps._ref *必需 | String。此步骤的唯一标识符,用于通过 next / yes / no 链接步骤。 |
sequence.steps.type *必需 | String enum。步骤类型:email、delay、trigger、goal、linkedin。 |
sequence.steps.next | String 或 null。此步骤之后要继续的步骤的 _ref(线性块:email、linkedin、delay)。 |
sequence.steps.yes | String。触发条件满足时要转到的步骤的 _ref(仅限 trigger)。 |
sequence.steps.no | String。触发条件不满足时要转到的步骤的 _ref(仅限 trigger)。 |
sequence.steps.waiting_type *delay / trigger 必填 | String enum。等待期的时间单位:minutes、hours、days。 |
sequence.steps.waiting_val *delay / trigger 必填 | Integer。要等待的时间单位数量。每单位限制:minutes ≤ 43200、hours ≤ 720、days ≤ 30。 |
sequence.steps.action *linkedin / trigger 必填 | String enum。要执行的操作或要监视的事件。请参阅下面的支持值。 |
sequence.steps.goal_name *goal 必填 | String。此目标步骤的标签,例如 Replied、Connected。goal 块必须是其分支中的最后一个步骤——它不能有 next,也不能是序列的第一个步骤。 |
sequence.steps.content_slots *email 必填 | Integer(最小 1,最大 15)。此邮件步骤的 A/B 内容变体数量。 |
sequence.steps.subject | String 或 null。邮件主题行(仅限 email);支持 {{variables}}。linkedin 步骤中 action=in_mail 时为必填项。 |
sequence.steps.body *invite / message / in_mail 必填 | String(HTML)。发送文本的 LinkedIn 操作的消息正文。不能为空。 |
sequence.steps.value *endorse_skills 必填 | Integer(1–5)用于 endorse_skills。来自 [1, 2, 3] 的 1–2 个唯一整数的数组用于 check_connection_level。 |
| 步骤类型 | Action 值 | 描述 |
|---|---|---|
linkedin | visit | 访问潜在客户的 LinkedIn 个人资料。 |
linkedin | like | 点赞潜在客户个人资料上的帖子。 |
linkedin | follow | 在 LinkedIn 上关注潜在客户。 |
linkedin | invite | 发送连接请求(需要 body)。 |
linkedin | message | 发送 LinkedIn 私信(需要 body)。 |
linkedin | in_mail | 发送 LinkedIn InMail(需要 body 和 subject)。 |
linkedin | connected_on_linkedin | 检查潜在客户是否已接受 LinkedIn 连接请求。 |
linkedin | check_connection_level | 检查潜在客户的连接程度级别。 |
linkedin | endorse_skills | 在潜在客户的个人资料上认可技能(需要 value 1–5)。 |
trigger | open | 等待查看潜在客户是否打开了邮件。 |
trigger | click | 等待查看潜在客户是否点击了邮件中的链接。 |
trigger | calendly | 等待查看潜在客户是否通过 Calendly 预约。 |
trigger | connected_on_linkedin | 系统触发器。LinkedIn connected_on_linkedin 步骤之后必须使用。connected_on_linkedin 步骤的 next 字段必须指向此触发器。 |
trigger | check_connection_level | 根据潜在客户的 LinkedIn 连接程度进行分支。 |
trigger | linkedin_in_mail_sent | 系统触发器。LinkedIn in_mail 步骤之后必须使用。in_mail 步骤的 next 字段必须指向此触发器。 |
| 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。 |
data.id | 已创建营销活动的 ID。 |
data.status | 营销活动状态。新创建的营销活动以 new 状态返回。 |
data.title | 营销活动名称。 |
data.email_accounts | 附加到营销活动的发件人邮件账户 ID 数组。 |
data.linkedin_accounts | 附加到营销活动的 LinkedIn 账户 ID 数组。 |
data.priority | 营销活动优先级(low、medium、high)。 |
data.tracking | 邮件跟踪设置(open、link_click)。 |
data.sending_settings | 发送设置,按服务器接受的原样回传,包括延迟配置。 |
data.recipients | 收件人列表(list_id、black_list_id)。 |
data.schedule_id | 附加到营销活动的发送计划 ID,或 null。 |
data.start_campaign_at | 营销活动开始发送的日期时间。 |
data.complete_campaign_at | 营销活动停止发送的日期时间。 |
data.timezone | 营销活动运行的时区标识符。 |
data.complete_campaign_after_last_step | 营销活动是否在最后一个步骤交付后自动完成。 |
data.archive_in_months | 自动归档期(月)。 |
data.provider_matching | 是否启用邮件提供商匹配。 |
data.sequence | 营销活动流程图,以相同结构回传。每个 email 步骤都通过描述生成的内容插槽(id、plain_text、usage)的 content 数组进行丰富。 |
data.deals | 商机创建设置,仅在请求中提供了 deals 时才存在。 |
GET获取营销活动信息
此方法允许您检索特定营销活动的信息,例如:已连接的发件人账户、发送设置、收件人列表信息以及序列步骤的详细信息。
| GET | https://api.snov.io/v2/campaigns/{campaign_id} |
campaign_id *必需 | 您想要查看信息的营销活动的唯一标识符。 |
<?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 | 布尔值。成功获取营销活动信息时返回 true。 |
data.id | 营销活动的 ID。 |
data.status | 营销活动状态。新创建的营销活动将以 new 状态返回。 |
data.title | 营销活动名称。 |
data.email_accounts | 附加到营销活动的发件人邮箱账户 ID 数组。 |
data.linkedin_accounts | 附加到营销活动的 LinkedIn 账户 ID 数组。 |
data.priority | 营销活动优先级(low、medium、high)。 |
data.tracking | 邮件追踪设置(open、link_click)。 |
data.sending_settings | 发送设置将原样返回,与服务器接受的内容完全一致,包括延迟配置。 |
data.recipients | 收件人列表(list_id、black_list_id)。 |
data.schedule_id | 附加到营销活动的发送计划 ID,或 null。 |
data.start_campaign_at | 营销活动开始发送的日期和时间。 |
data.complete_campaign_at | 营销活动停止发送的日期和时间。 |
data.timezone | 营销活动运行的时区标识符。 |
data.complete_campaign_after_last_step | 营销活动是否在最后一步发送后自动完成。 |
data.archive_in_months | 自动归档周期(月)。 |
data.provider_matching | 是否启用邮件提供商匹配。 |
data.sequence | 营销活动流程图,以相同的结构原样返回。每个 email 步骤都会附带一个 content 数组,描述生成的内容槽(id、plain_text、usage)。 |
data.deals | 交易创建设置,仅在请求中提供了 deals 时才会出现。 |
PATCH更新营销活动
此方法对 snov.io 工作区中现有推广活动进行局部更新。仅修改请求体中包含的字段;未提及的字段保持不变。嵌套对象(tracking、sending_settings、recipients、deals)同样执行合并操作——发送 {"tracking": {"open": false}} 不会清除 link_click。请求体与创建营销活动的结构相同,因此可以发送 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 和 deals 中的任意子集。
核心设置(下方标注 (core) 的字段)仅在营销活动处于 new(草稿)状态时可写——一旦活动进入 paused、active、scheduled、completed 或 archived 状态,这些字段将被锁定。
提供 sequence 时,该数组将完全替换现有流程图。_ref 与现有数字步骤 ID 匹配的步骤将原地更新;非数字 _ref 的步骤将被创建为新步骤;数组中缺失的现有步骤将被删除。
| PATCH | https://api.snov.io/v2/campaigns/{campaign_id} |
campaign_id *必需(path) | 整数。要更新的营销活动 ID。 |
title | 字符串。营销活动显示名称。最多 255 个字符。 |
priority | 字符串枚举。发送优先级:low、medium、high。 |
email_accounts | 整数数组。邮件发送账户 ID 列表。如果活动营销活动中不包含任何邮件步骤,则无法添加邮件账户。 |
linkedin_accounts | 整数数组。LinkedIn 账户 ID 列表。如果活动营销活动中不包含任何 LinkedIn 步骤,则无法添加 LinkedIn 账户。 |
provider_matching | 布尔值。将收件人邮件提供商与发件账户提供商匹配。仅 LinkedIn 活动始终为 false。 |
complete_campaign_after_last_step | 布尔值。所有收件人通过最后一个序列步骤后自动停止营销活动。 |
archive_in_months | 整数。经过指定月数后自动归档。允许值:1、2、3、6。 |
schedule_id | 整数或 null。发送计划 ID。不存在的 ID 返回 404/422。 |
start_campaign_at | 字符串(YYYY-MM-DD HH:MM:SS)或 null。营销活动应自动启动的日期时间。如果创建时该字段不存在,则无法添加;null 无效(不会清除现有值)。 |
complete_campaign_at | 字符串(YYYY-MM-DD HH:MM:SS)或 null。营销活动应自动停止的日期时间。必须晚于 start_campaign_at。null 无效。 |
timezone | 字符串或 null。用于日期字段的时区,接受 IANA 时区标识符,格式为 Region/City,例如 America/New_York。仅在营销活动存在 start_campaign_at 时生效。 |
recipients (core) | 对象。收件人配置。已启动的营销活动中被锁定,草稿中可编辑。 |
recipients.list_id (core) | 整数。潜在客户列表 ID。 |
recipients.black_list_id (core) | 整数或 null。要排除的黑名单 ID。 |
tracking | 对象。邮件跟踪设置。仅 LinkedIn 活动将忽略此字段。 |
tracking.open | 布尔值。跟踪邮件打开情况。 |
tracking.link_click | 布尔值。跟踪邮件中的链接点击。 |
sending_settings | 对象。控制邮件发送方式及跳过哪些收件人。 |
sending_settings.sending_priority | 字符串枚举。哪些邮件优先发送:first_email 或 follow_up。 |
sending_settings.daily_sending_all | 整数或 null。每天发送给所有收件人的最大邮件数。null 取消限制。 |
sending_settings.daily_sending_new_recipients | 整数或 null。每天联系新收件人的最大数量。null 取消限制。 |
sending_settings.skip_who_replied | 布尔值。对已回复的潜在客户停止跟进。 |
sending_settings.skip_company_domain_who_replied | 布尔值。跳过已有人回复的公司域名下的收件人。 |
sending_settings.skip_unverifiable (core) | 布尔值。跳过无法验证邮件的收件人。已启动的营销活动中被锁定。 |
sending_settings.skip_unverified (core) | 布尔值。跳过邮件未经验证的收件人。已启动的营销活动中被锁定。 |
sending_settings.skip_other_recipients_email_addresses (core) | 布尔值。如果潜在客户有多个邮件地址,当值为 true 时仅发送至第一个邮件。已启动的营销活动中被锁定。 |
sending_settings.skip_recipients_added_to_my_another_campaign (core) | 布尔值。跳过已在该用户另一个营销活动中的收件人。已启动的营销活动中被锁定。 |
sending_settings.skip_recipients_added_to_team_another_campaign (core) | 布尔值。跳过在团队任何成员的另一个营销活动中的收件人。已启动的营销活动中被锁定。 |
sending_settings.skip_recipients_without_variables_data | 布尔值。跳过缺少自定义变量值的收件人。 |
sending_settings.one_click_unsubscribe | 布尔值。在邮件中启用一键退订标头。 |
deals | 对象或 null。CRM 商机创建设置。传递 null 可移除商机配置。 |
deals.event *deals 时必填 | 字符串数组。触发商机创建的事件:open、click、reply。 |
deals.pipeline_id *deals 时必填 | 整数。CRM 管道 ID。 |
deals.stage_id *deals 时必填 | 整数。管道阶段 ID。 |
deals.potential_value | 整数。预计商机价值。必须为正数。 |
deals.currency | 字符串。商机价值的货币代码,例如 USD、EUR。 |
sequence | 对象。完整替换营销活动序列——提供时将替换整个流程图。 |
sequence.entry *sequence 时必填 | 字符串。要执行的第一个步骤的 _ref。 |
sequence.steps *sequence 时必填 | 步骤对象数组。完整步骤列表。 |
sequence.steps._ref *必需 | 字符串。步骤标识符。数字 _ref 更新现有步骤;非数字 _ref 创建新步骤。 |
sequence.steps.type *必需 | 字符串枚举。步骤类型:email、delay、trigger、goal、linkedin。现有步骤(数字 _ref)不可更改类型。 |
sequence.steps.next | 字符串或 null。此步骤后继步骤的 _ref(线性块:email、linkedin、delay)。 |
sequence.steps.yes | 字符串。触发条件满足时跳转步骤的 _ref(仅 trigger)。 |
sequence.steps.no | 字符串。触发条件不满足时跳转步骤的 _ref(仅 trigger)。 |
sequence.steps.waiting_type *delay / trigger 时必填 | 字符串枚举。时间单位:minutes、hours、days。 |
sequence.steps.waiting_val *delay / trigger 时必填 | 整数。等待的时间单位数。delay 和 trigger 步骤最小为 1。各单位限制:minutes ≤ 43200、hours ≤ 720、days ≤ 30。 |
sequence.steps.action *linkedin / trigger 时必填 | 字符串枚举。要执行的操作或要监听的事件。请参阅下方支持的值。 |
sequence.steps.goal_name *goal 时必填 | 字符串。该目标步骤的标签,例如 Replied、Connected。goal 块必须是其分支中的最后一步——不能有 next,也不能是序列的第一步。 |
sequence.steps.content_slots *email 时必填 | 整数(最小 1,最大 15)。A/B 内容变体数量。 |
sequence.steps.content *更新现有步骤时 email 必填 | 对象数组。从 GET 响应复制的内容元数据;每项为:{"id": <int>, "plain_text": <bool>, "usage": "active"}。 |
sequence.steps.subject | 字符串或 null。邮件或 InMail 主题行;支持 {{variables}}。email 步骤可选;action=in_mail 的 linkedin 步骤必填。 |
sequence.steps.body *invite / message / in_mail 时必填 | 字符串(HTML)。发送文本的 LinkedIn 操作的消息正文。 |
sequence.steps.value *endorse_skills / check_connection_level 时必填 | endorse_skills 时为整数(1–5);check_connection_level 触发器时为整数数组(有效连接度级别)。 |
| visit | 访问潜在客户的 LinkedIn 主页。 | |
| like | 为潜在客户主页上的帖子点赞。 | |
| follow | 在 LinkedIn 上关注潜在客户。 | |
| invite | 发送连接请求(需要 body)。 | |
| message | 发送 LinkedIn 私信(需要 body)。 | |
| in_mail | 发送 LinkedIn InMail(需要 body 和 subject;后面必须跟一个 linkedin_in_mail_sent 触发器)。 | |
| connected_on_linkedin | 检查潜在客户是否已接受 LinkedIn 上的连接请求。 | |
| check_connection_level | 检查潜在客户的人脉度。 | |
| endorse_skills | 在潜在客户主页上为技能背书(需要 value 1–5)。 | |
| trigger | open | 等待查看潜在客户是否打开邮件。 |
| trigger | click | 等待查看潜在客户是否点击邮件中的链接。 |
| trigger | calendly | 等待查看潜在客户是否通过 Calendly 预约(必须跟在邮件步骤后面;最多 30 天)。 |
| trigger | connected_on_linkedin | 系统触发器。在 LinkedIn connected_on_linkedin 步骤之后必须添加。connected_on_linkedin 步骤的 next 字段必须指向此触发器。 |
| trigger | check_connection_level | 根据潜在客户的 LinkedIn 人脉度进行分支(需要 value:有效度级别的数组)。 |
| trigger | linkedin_in_mail_sent | 系统触发器。LinkedIn in_mail 步骤后必须使用。in_mail 步骤的 next 字段必须指向此触发器。 |
<?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 | 布尔值。营销活动更新成功时为 true。 |
data.id | 已更新营销活动的 ID。 |
data.status | 营销活动当前状态。 |
data.title | 营销活动名称。 |
data.email_accounts | 附加到营销活动的发件邮件账户 ID 数组。 |
data.linkedin_accounts | 附加到营销活动的 LinkedIn 账户 ID 数组。 |
data.priority | 营销活动优先级(low、medium、high)。 |
data.tracking | 邮件跟踪设置(open、link_click)。 |
data.sending_settings | 更新后服务器上存储的发送设置原样返回。 |
data.recipients | 收件人列表(list_id、black_list_id)。 |
data.schedule_id | 附加到营销活动的发送计划 ID,或 null。 |
data.start_campaign_at | 营销活动开始发送的日期时间。 |
data.complete_campaign_at | 营销活动停止发送的日期时间。 |
data.timezone | 营销活动运行的时区标识符。 |
data.complete_campaign_after_last_step | 最后一步交付后营销活动是否自动完成。 |
data.archive_in_months | 自动归档周期(月)。 |
data.provider_matching | 是否启用邮件提供商匹配。 |
data.sequence | 营销活动流程图,对账后以相同结构返回。每个 email 步骤都会附带 content 数组,描述其内容插槽(id、plain_text、usage)。 |
data.deals | 商机创建设置,仅在营销活动配置了商机创建时存在。 |
POST更改营销活动状态
免费此方法允许您管理营销活动的状态——启动、暂停、完成或存档。
| POST | https://api.snov.io/v2/campaigns/{campaign_id}/action |
campaign_id *必需(path) | 您想更改状态的营销活动的唯一标识符。 |
action | 营销活动可转换到的状态。允许的值: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 | 根据执行结果,可返回 true 或 false。 |
errors | 更改营销活动状态时发生的错误列表。 |
DELETE删除营销活动
此方法通过 ID 删除营销活动。仅允许删除状态为 new(草稿)、complete 或 archived 的营销活动——状态为 active、pause 或 scheduled 的营销活动必须先停止才能删除。
| DELETE | https://api.snov.io/v2/campaigns/{campaign_id} |
campaign_id *必需(path) | 整数。要删除的营销活动 ID。 |
<?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 | 布尔值。营销活动删除成功时为 true。 |
电子邮件步骤内容
这些方法允许您管理营销活动序列中电子邮件步骤的内容块(主题行和正文)。只有当营销活动处于 new、paused 或 scheduled 状态时,才能修改内容。每个步骤必须至少有一个内容块。
GET查看所有时间表
免费该方法显示所有营销活动时间表的列表。
| GET | https://api.snov.io/v2/campaigns/schedules |
| 此方法没有输入参数。 |
<?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。 |
name | 时间表名称。 |
timezone | 时间表所遵循的时区。 |
days | 该时间表中的可发送日期和时间组。 |
day | 星期几。 |
enabled | 如果该天允许发送,则显示 true。不允许发送时返回 false。 |
start_time | 该日程当天的开始时间。 |
end_time | 该日程当天的结束时间。 |
POST创建邮件步骤内容
免费此方法为营销活动中的邮件序列步骤创建或更新内容块。如果指定 content_id 的内容块已存在,则将被覆盖。内容只能在营销活动处于 new、paused 或 scheduled 状态时修改。
| POST | https://api.snov.io/v2/campaigns/{campaign_id}/steps/{step_id}/content/create |
campaign_id *必需(path) | 整数。营销活动 ID。 |
step_id *必需(path) | 整数。邮件序列步骤 ID。 |
content_id *必需 | 整数。要写入的内容块 ID。再次发送相同的 content_id 将覆盖现有块。 |
subject *必需 | 字符串。邮件主题行。支持 {{variables}}。 |
body *必需 | 字符串(HTML)。邮件正文。 |
plain_text *必需 | 布尔值。true 以纯文本格式发送邮件,false 以 HTML 格式发送。 |
usage *必需 | 字符串。内容块状态。允许值:"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 | 布尔值。请求成功时为 true。 |
data.id | 整数。内容块 ID。 |
data.subject | 字符串。邮件主题行。 |
data.body | 字符串(HTML)。邮件正文。 |
data.plain_text | 布尔值。纯文本模式时为 true,HTML 时为 false。 |
data.usage | 字符串。内容块状态。允许值:"active"、"pause"。 |
GET获取邮件步骤内容
免费此方法通过 content_id 返回邮件序列步骤的内容块。
| GET | https://api.snov.io/v2/campaigns/{campaign_id}/steps/{step_id}/content/{content_id} |
campaign_id *必需(path) | 整数。营销活动 ID。 |
step_id *必需(path) | 整数。邮件序列步骤 ID。 |
content_id *必需(path) | 整数。内容块 ID。 |
<?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 | 整数。内容块 ID。 |
data.subject | 字符串。邮件主题行。 |
data.body | 字符串(HTML)。邮件正文。 |
data.plain_text | 布尔值。纯文本模式时为 true,HTML 时为 false。 |
data.usage | 字符串。内容块状态。允许值:"active"、"pause"。 |
PATCH更新邮件步骤内容
免费此方法局部更新邮件序列步骤的内容块。仅更新请求体中提供的字段;未提及的字段保持不变。至少需要包含一个字段。内容只能在营销活动处于 new、paused 或 scheduled 状态时修改。
| PATCH | https://api.snov.io/v2/campaigns/{campaign_id}/steps/{step_id}/content/{content_id} |
campaign_id *必需(path) | 整数。营销活动 ID。 |
step_id *必需(path) | 整数。邮件序列步骤 ID。 |
content_id *必需(path) | 整数。内容块 ID。 |
subject | 字符串。邮件主题行。支持 {{variables}}。 |
body | 字符串(HTML)。邮件正文。 |
plain_text | 布尔值。true 为纯文本,false 为 HTML。 |
usage | 字符串。内容块状态。允许值:"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 | 布尔值。请求成功时为 true。 |
data.id | 整数。内容块 ID。 |
data.subject | 字符串。邮件主题行。 |
data.body | 字符串(HTML)。邮件正文。 |
data.plain_text | 布尔值。纯文本模式时为 true,HTML 时为 false。 |
data.usage | 字符串。内容块状态。允许值:"active"、"pause"。 |
DELETE删除邮件步骤内容
免费此方法从邮件序列步骤中移除内容块。不允许删除步骤中最后剩余的内容块——每个步骤必须至少有一个内容块。
| DELETE | https://api.snov.io/v2/campaigns/{campaign_id}/steps/{step_id}/content/{content_id} |
campaign_id *必需(path) | 整数。营销活动 ID。 |
step_id *必需(path) | 整数。邮件序列步骤 ID。 |
content_id *必需(path) | 整数。要删除的内容块 ID。 |
<?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 | 布尔值。内容块成功删除时为 true。 |
收件人管理
这些方法允许您管理营销活动收件人——检查和更新其状态、查看已完成的潜在客户,并维护"禁止发送电子邮件"列表,以控制谁接收您的营销活动。
GET检查收件人状态
免费此方法检查指定邮箱是否作为收件人存在于特定营销活动中,并返回其当前状态。适用于在向营销活动添加新收件人之前进行去重——例如,避免联系已注册、已完成或已取消订阅的潜在客户。
| GET | https://api.snov.io/v2/campaigns/[campaign_id]/recipient |
campaign_id *必需 | 营销活动的唯一标识符。 |
emails[] *必需 | 要检查的邮箱地址数组。每次请求最少 1 个,最多 100 个。每个邮箱必须唯一且不超过 100 个字符。 |
<?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 | 请求中的邮箱地址(原样返回)。 |
exist | 如果邮箱作为收件人存在于营销活动中,则为 true,否则为 false。 |
status | 收件人在营销活动中的当前状态(例如 tocheck、active、finished、unsubscribe、moved)。当 exist 为 false 时为 null。 |
POST更改收件人状态
免费更改特定营销邮件中收件人的状态。
| POST | https://api.snov.io/v1/change-recipient-status |
email *必需 | 潜在客户邮箱地址。 |
campaign_id *必需 | 营销邮件 id。查看营销信息时可以在网址里找到(显示一个示例). |
status *必需 | 可以包含“活动”、“已暂停”或“已取消订阅”。如果收件人的状态为“已完成”或“已移除”,则您无法更改其状态。 |
<?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
}方法返回 success: true如果潜在客户的状态已成功更改。如果发生任何错误,方法将返回success: false连同一个错误描述。
GET查看已完成潜在客户列表
免费此方法返回已完成营销的潜在客户。
| GET | https://api.snov.io/v1/prospect-finished |
campaignId *必需 | 用于检索潜在客户列表的营销的唯一标识符。 |
<?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 | 请求的唯一标识符。 |
prospectId | 潜在客户的唯一标识符。 |
userName | 潜在客户全名。 |
userEmail | 潜在客户邮箱地址。 |
campaign | 营销名称。 |
POST添加到免发送邮箱列表
免费使用该方法,您可将邮箱地址或域名,添加到免发送邮箱列表中。在列表中添加此邮箱地址/域名后,您将无法向其发送邮件。
| POST | https://api.snov.io/v1/do-not-email-list |
items | 您想要添加到免发送邮箱列表中的邮箱地址或域名。 |
listId *必需 | 邮箱和域名归属的免发送邮件列表标识符。 |
<?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 | 该参数显示了之前被添加到免发送邮箱列表中的邮箱地址/域名。 |
GET查看所有免发送电子邮件列表
免费该方法返回所有免发送电子邮件列表。
| GET | https://api.snov.io/v2/blacklists |
| 此方法没有输入参数。 |
<?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。 |
name | 列表名称。 |
owner | 创建列表的人员姓名。 |
total | 列表中的记录总数(电子邮件和网站)。 |
分析与报告
这些只读方法提供营销活动效果的可见性——投递、打开、点击和回复。使用它们监控参与度并导出数据进行分析。
GET获取营销分析
免费此方法根据应用的筛选条件显示营销统计信息。
| GET | https://api.snov.io/v2/statistics/campaign-analytics |
campaign_id | 营销 ID。在查看营销信息时,您可以在 URL 中找到该 ID (示例).
如果将此字段留空,系统将提供在指定时间段内所有活动营销的数据。 要获取多个营销的数据,请用逗号分隔 ID。 |
sender_email | 邮箱发件人账户 ID。在查看或编辑邮箱账户信息时,您可以在 URL 中找到该 ID (示例).
要查看多个邮箱账户的分析,请用逗号分隔 ID。 或者,如果您不想应用邮箱账户筛选器,可以将此参数留空。 |
sender_linkedin | 领英发件人账户 ID。在查看或编辑领英账户信息时,您可以在 URL 中找到该 ID。要查看多个账户的分析,请用逗号分隔 ID。 如果不想应用领英账户筛选器,可以将此参数留空。 |
campaign_owner | 要查看特定团队成员的营销数据,请输入其邮箱地址。要按多个营销所有者进行过滤,请列出用逗号 (无空格) 分隔的邮箱地址。 示例:example1@gmail.com,example2@gmail.com 请注意,要使用此筛选条件,您的账户必须启用“查看团队记录 ”权限,并且您需要使用 Pro 套餐或更高级别的套餐。 |
date_from *必需 | 您希望接收统计信息的时间段的开始日期。格式:yyyy-mm-dd。 |
date_to *必需 | 您希望接收统计信息的时间段的结束日期。格式:yyyy-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 | 通过邮件或领英 (连接请求、消息或站内信) 联系的收件人总数。 |
emails_sent | 通过营销发送的邮件总数。 请注意,这不包括在营销之外发送的邮件。 |
first_emails | 在指定时间段内发送的营销邮件序列中的首封邮件的数量。 |
first_emails_rate | 首封邮件占已发送邮件总数的百分比。 |
follow_ups | 在指定时间段内发送的营销邮件序列中的跟进邮件的数量。 |
follow_ups_rate | 跟进邮件占已发送邮件总数的百分比。 |
delivered | 未退回的已发送邮件的数量。 |
delivered_rate | 未退回邮件占已发送邮件总数的百分比。 |
bounced | 退回的邮件数量。 |
bounced_rate | 退回邮件占已发送邮件总数的百分比。 |
contacted_by_email | 至少收到一封未被退回的邮件的收件人数量。 |
email_opens | 至少打开过一次邮件的收件人数量。 |
email_opens_rate | 在所有联系的收件人中,至少打开过您的邮件一次的收件人百分比。 |
link_clicks | 在您的营销中至少点击过一个链接的收件人数量。 |
link_clicks_rate | 在所有联系的收件人中,至少点击过营销中一个链接的收件人百分比。 |
email_replies | 至少回复过一次的收件人数量。 |
email_replies_rate | 在所有联系的收件人中,至少回复过一次的收件人百分比。 |
unsubscribed | 点击了营销中的“退订”链接并选择不再接收邮件的收件人数量。 |
unsubscribed_rate | 在所有联系的收件人中,点击了营销中的“退订”链接的收件人百分比。 |
auto_replied | 自动回复营销邮件的收件人数量。 |
auto_replied_rate | 在所有联系的收件人中,自动回复的收件人百分比。 |
contacted_by_linkedin | 您在领英上向其发送了至少一条消息或一次连接请求的收件人数量。 |
linkedin_total_replies | 对领英上发送的任何消息 (领英消息、连接请求消息和站内信) 至少回复过一次的收件人数量。 |
linkedin_total_replies_rate | 对领英上发送的任何消息 (领英消息、连接请求消息和站内信) 至少回复过一次的收件人百分比。 |
connection_request_replies | 回复连接请求消息的收件人数量。 |
connection_request_replies_rate | 在所有联系的收件人中,回复连接请求消息的收件人百分比。 |
message_replies | 回复常规领英消息的收件人数量。 |
message_replies_rate | 在所有联系的收件人中,回复常规领英消息的收件人百分比。 |
in_mail_replies | 回复领英站内信消息的收件人数量。 |
in_mail_replies_rate | 回复领英站内信消息的收件人百分比。 |
connection_requests | 通过 Snov.io 营销发送给潜在客户的连接请求数量。 |
accepted_requests | 领英会员接受的连接请求数量。 |
accepted_requests_rate | 在所有发送的请求中,被接受的连接请求百分比。 |
failed_connection_requests | 由于以下原因未发送的领英连接请求数:
|
messages_sent | 发送的领英信息数量。 |
linkedin_views | 浏览的潜在客户个人资料数量。 |
linkedin_likes | 在领英上点赞的潜在客户帖子数量。 |
linkedin_follows | 关注的潜在客户个人资料数量。 |
in_mail_sent | 发送的领英站内信消息总数。 |
interested | 在回复中表现出感兴趣的收件人数量。 |
interested_rate | 在回复中表现出感兴趣的收件人百分比。 |
maybe | 在回复中没有直接表现出感兴趣或不感兴趣的收件人数量。 |
maybe_rate | 在回复中没有直接表现出感兴趣或不感兴趣的收件人百分比。 |
not_interested | 在回复中表现出不感兴趣的收件人数量。 |
not_interested_rate | 在回复中表现出不感兴趣的收件人百分比。 |
GET查看营销进度
免费通过这样的方式您可以了解到营销进度和状态。
| GET | https://api.snov.io/v2/campaigns/[campaign_id]/progress |
campaign_id *必需 | 营销 ID。在查看营销信息时,您可以在 URL 中找到该 ID (示例). |
<?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 | 以下情况的收件人百分比:
|
unfinished | 营销中未到达序列末尾或未停止序列的收件人数量。 |
status | 营销状态。了解更多 |
GET获取营销活动收件人活动报告
免费此方法返回营销活动所有收件人的详细活动报告——包括发送、打开、点击、回复、退回和取消订阅事件——以及潜在客户详情。它与营销活动界面中可用的收件人活动报告相对应,适合将营销活动数据同步到外部仪表板或 CRM 系统。
| GET | https://api.snov.io/v2/campaigns/[campaignId]/recipients-activity |
campaignId *必需 | 营销活动的唯一标识符。 |
dateFrom *必需 | 日期范围的开始,格式为 Y-m-d(UTC)。 |
dateTo *必需 | 日期范围的结束,格式为 Y-m-d(UTC)。dateFrom 和 dateTo 之间的最大范围为 31 天。 |
offset | 分页偏移量(默认:0)。 |
limit | 每页记录数(默认:100,最大: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 | 事件时间,ISO 8601 格式(UTC)。 |
event_type | 事件类型:sent、open、click、reply、bounce、unsubscribe。 |
sender_email | 发件人的邮箱地址(营销活动邮箱)。 |
email_subject | 营销活动序列中的邮件主题行。 |
recipient_email | 收件人的邮箱地址。 |
recipient_name | 收件人的全名。 |
phone | 收件人的电话号码(来自潜在客户档案)。 |
country | 收件人所在国家。 |
location | 收件人所在地(城市、地区)。 |
industry | 收件人公司所属行业。 |
company | 收件人的公司名称。 |
job_position | 收件人的职位。 |
website | 收件人公司的网站。 |
hq_phone | 收件人公司总部的电话号码。 |
total | 与请求匹配的记录总数。 |
offset | 当前分页偏移量。 |
limit | 响应中使用的页面大小。 |
has_more | 如果当前页面之后还有更多记录,则为 true。 |
GET查看已发送电子邮件
免费此方法显示有关营销中已发送电子邮件的信息。
| GET | https://api.snov.io/v1/emails-sent |
campaignId *必需 | 您要查看其已发送电子邮件的营销的唯一标识符。 |
offset | 每次请求最多可收集 10,000 封已发送的邮件。 如果您的营销发送了更多邮件,请使用偏移量来表示您要跳过的先前邮件的数量。 例如,如果您的营销已发送 20,000 封邮件,而您希望请求第 10,001封到第 20,000 封邮件,请将偏移量设置为 10,000。 如果未指定偏移量,您将获得营销中发送的最后 10,000 封邮件。 |
<?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 | 电子邮件发送的确切时间。 |
userName | 向其发送邮件的潜在客户的全名。 |
userEmail | 潜在客户邮箱地址。 |
campaign | 营销名称。 |
GET获取营销邮件打开数信息
免费此方法显示有关营销中已打开电子邮件的信息。
| GET | https://api.snov.io/v1/get-emails-opened |
campaignId *必需 | 您想要查看邮件打开信息的营销的唯一标识符。 |
offset | 每次请求最多可收集 10,000 次打开。 如果您的营销有更多的邮件打开次数,请使用偏移量来表示您要跳过的先前打开的次数。 例如,如果您的营销有 20,000 次打开,而您希望请求第 10,001 次到第 20,000 次打开,请将偏移量设置为 10,000。 如果未指定偏移量,您将获得最近 10,000 封被打开的邮件。 |
<?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 | 营销的唯一标识符。 |
campaign | 营销名称。 |
prospectName | 打开电子邮件的潜在客户的全名。 |
emailSubject | 被打开的电子邮件的邮件标题。 |
visitedAt | 潜在客户打开电子邮件的确切时间。 |
GET检查链接点击数
免费此方法返回所有点击过营销邮件中链接的营销收件人的信息。
| GET | https://api.snov.io/v1/get-emails-clicked |
campaignId *必需 | 您要查看其链接点击情况的营销的唯一标识符。 |
offset | 每次请求最多可收集 10,000 次点击。 如果您的营销有更多点击次数,请使用偏移量来表示您要跳过的先前点击的次数。 例如,如果您的营销有 20,000 次点击,而您希望请求第10,001次到第 20,000 次点击,请将偏移量设置为 10,000。 如果未指定偏移量,您将获得营销中的点击链接的最后 10,000 封邮件。 |
<?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 | 营销的唯一标识符。 |
campaign | 营销名称。 |
prospectName | 在营销中点击电子邮件链接的潜在客户的全名。 |
prospectEmail | 潜在客户邮箱地址。 |
emailSubject | 包含被点击链接的邮件的邮件标题。 |
emailBody | 邮件内容。 |
visitedAt | 潜在客户点击电子邮件中链接的确切时间。 |
GET查看营销活动所有回复
免费此方法显示营销活动中收到的所有回复列表——包括邮件回复和 LinkedIn 回复(连接请求回复、LinkedIn 消息回复和 InMail 回复)。每条记录代表一个唯一的(潜在客户,回复类型)对;记录中的回复按时间顺序排列。
| GET | https://api.snov.io/v2/campaigns/[campaign_id]/all-replies |
campaign_id *必需 | 营销活动的唯一标识符。 |
offset | 分页偏移量(默认: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 | 营销活动的唯一标识符。 |
campaign | 营销活动名称。 |
prospectId | 潜在客户的唯一标识符。 |
prospectName | 潜在客户的全名。 |
prospectEmail | 潜在客户的邮箱地址。 |
linkedInProfile | 潜在客户的 LinkedIn 档案 URL(如有)。 |
replyType | 回复类型:email、linkedinMessage、linkedinInvite、linkedinInMail。 |
receivedAt | 此(潜在客户,回复类型)对中最早回复的日期和时间。 |
replies[].subject | 回复的主题(LinkedIn 无主题回复为空字符串)。 |
replies[].message | 回复正文。 |
replies[].receivedAt | 收到特定回复的日期和时间。 |
GET查看营销邮件回复
免费此方法返回营销活动中收到的邮件回复,包括潜在客户姓名、ID、营销活动等信息。要在邮件回复之外获取 LinkedIn 回复(连接请求、私信、InMail),请使用 查看营销活动所有回复方法。
| GET | https://api.snov.io/v1/get-emails-replies |
campaignId *必需 | 您想要查看邮件回复情况的营销的唯一标识符。 |
offset | 每次请求最多可收集 10,000 条回复。如果您的营销有更多回复,请使用偏移量来表示您要跳过的先前回复的数量。 例如,如果您的营销有 20,000 条回复,而您希望请求第 10,001 条到第 20,000 条回复,则将偏移量设为 10,000。 如果未指定偏移量,您将获得最近收到的 10,000 条回复。 |
<?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 | 营销的唯一标识符。 |
campaign | 营销名称。 |
prospectName | 潜在客户全名。 |
emailSubject | 收到回复的电子邮件的标题。 |
emailBody | 收到回复的电子邮件的内容。 |
POST将潜在客户添加到列表
免费将潜在客户添加到特定列表。对于希望将潜在客户自动添加到列表中以进行邮件自动化营销的人士,这种方法非常实用。在将潜在客户自动添加到所选列表之后,便会自动开始邮件自动化营销。
| POST | https://api.snov.io/v1/add-prospect-to-list |
email | 潜在客户邮箱地址。 |
fullName | 潜在客户全名。 |
firstName | 潜在客户名字。 |
lastName | 潜在客户姓氏。 |
phones | 包含潜在客户电话号码的数组。 |
country | 潜在客户国家。国家名称定义此处。请仅使用此列表中的国家 |
locality | 潜在客户所在地点。 |
position | 潜在客户职务。 |
companyName | 潜在客户公司名称。 |
companySite | 潜在客户公司网站。请使用 http://example.com 格式。 |
updateContact | 更新现有潜在客户。该参数可接受值为 true 或 false。
|
createDuplicates | 创建重复的潜在客户。该参数可接受值为 true 或 false。
参数 updateContact 与 createDuplicates 只能有一个设置为 true。 |
customFields[specialization] | 您可以在先前创建的自定义字段中添加自定义值。 为此,请在[brackets]中指定自定义字段的名称。 |
socialLinks[linkedIn] *Required if email is null | 潜在客户社交媒体资料的链接。 在 [括号] 中指定社交网络的名称 (领英、Facebook 或 X) 。 |
listId *必需 | 潜在客户所属列表的标识符。 |
<?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 | 是 true 如果潜在客户已成功添加到列表中。 |
id | 添加潜在客户标识符。 |
added | 是 true 如果潜在客户已添加到列表中。 |
updated | 是 true 如果现有潜在客户的数据已更新。 |
errors | 将潜在客户添加到列表中时出错。 |
POST通过 ID 查找潜在客户
免费根据 ID 从您的列表中找到潜在客户。了解特定潜在客户的 ID 之后,您可以获得有关该潜在客户的完整信息,包括已添加到这些潜在客户的列表和营销邮件。
| POST | https://api.snov.io/v1/get-prospect-by-id |
id *必需 | 潜在客户的 ID。您可以在回执中看到它当您添加一个潜在客户通过将潜在客户添加到列表API 方法或网址当您查看潜在客户页面时(参见一个示例). |
<?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 | 是 true 如果已经找到潜在客户 |
id | 唯一的配置文件标识符 |
name | 潜在客户全名 |
firstName | 潜在客户名字 |
lastName | 潜在客户姓氏 |
industry | 潜在客户资料中显示的行业 |
country | 潜在客户所在国家 |
locality | 潜在客户所在地点 |
social | 潜在客户的社交资料链接 |
currentJobs | 数组包含有关潜在客户当前职务的信息 |
previousJobs | 数组包含有关潜在客户以前职务的信息 |
lastUpdateDate | 上次资料更新日期 |
lists | 已添加潜在客户的列表 |
campaigns | 此潜在客户已作为收件人添加到的营销列表。包含简短的统计信息,如状态、发出的邮件数量、打开数和回复数。 |
POST通过邮箱地址查找潜在客户
免费通过邮箱地址从您的列表中查找潜在客户。当您通过邮箱地址搜索时,您会收到与此邮箱地址关联的所有潜在客户列表。列表中的每个元素都包含潜在客户的完整信息,包括他们添加到的列表和营销邮件。
| POST | https://api.snov.io/v1/get-prospects-by-email |
email *必需 | 潜在客户邮箱地址。 |
<?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 | 是 true 如果已经找到潜在客户 |
id | 唯一的配置文件标识符 |
name | 潜在客户全名 |
firstName | 潜在客户名字 |
lastName | 潜在客户姓氏 |
industry | 潜在客户资料中显示的行业 |
country | 潜在客户所在国家 |
locality | 潜在客户所在地点 |
social | 潜在客户的社交资料链接 |
currentJobs | 数组包含有关潜在客户当前职务的信息 |
previousJobs | 数组包含有关潜在客户以前职务的信息 |
lastUpdateDate | 上次资料更新日期 |
lists | 已添加潜在客户的列表 |
campaigns | 此潜在客户已作为收件人添加到的营销邮件列表。包含简短的统计信息,如状态、发出的邮件数量、打开数和回复数。 |
GET查找潜在客户的自定义字段
免费此方法返回用户创建的所有自定义字段的列表,包括字段的名称、字段为可选或必填,以及字段的数据类型。
| GET | https://api.snov.io/v1/prospect-custom-fields |
| 这个方法没有输入参数 |
<?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 | customFields 数组中的字段关键字。 |
label | 字段名称。 |
required | 是 true 如果自定义字段为必填项。 |
type | 自定义字段的数据类型(字符串、数字或日期)。 |
GET查看用户列表
免费此方法返回用户创建的所有列表。您可以使用此方法来查看可用于邮件自动化营销的列表。
| GET | https://api.snov.io/v1/get-user-lists |
| 这个方法没有输入参数 |
<?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 | 用户列表的唯一标识符。 |
name | 列表名称 |
contacts | 列表中的潜在客户数目。 |
isDeleted | 列表状态。为 true 如果列表已被删除。 |
creationDate | 列表创建的日期和时间(包括日期、时间和时区信息)。 |
deleteDate | 如果列表已被删除,则包含列表删除的日期和时间(包括日期、时间和时区信息)。 |
POST在列表中查看潜在客户
免费此方法返回特定列表中的潜在客户的所有数据,包括潜在客户的电子邮件地址和状态等数据。
| POST | https://api.snov.io/v1/prospect-list |
listId *必需 | 列表的唯一标识符。 |
page | 您可以选择在列表中的哪一页开始搜索。该字段为可选项。 |
perPage | 设置单次请求中返回的潜在客户数量上限。最大值为5000。 |
<?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)
请注意,潜在客户结果是按照从最后一位到第一位的倒序显示。
{
"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 | 一个包含有关列表及潜在客户信息的数组。 |
name | 列表名称。 |
contacts | 列表中的潜在客户数目。 |
creation_date | 列表创建的日期(包括日期、时间和时区信息)。 |
emailsCount | 列表中的电子邮件数目。 |
prospects | 列表中的潜在客户列表。 |
id | 一个潜在客户的唯一标识符。 |
name | 一个潜在客户的全名。 |
emails | 一个属于潜在客户的电子邮件列表。 |
POST创建新的潜在用户列表
免费使用该方法,在您的账户中创建新的潜在用户列表。
| POST | https://api.snov.io/v1/lists |
name | 新潜在用户列表名称。 |
<?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 | 已创建的潜在用户列表ID。 |
GET获取销售漏斗列表
免费该方法显示 CRM(交易)部分中所有销售漏斗的列表,包括每个销售漏斗中的交易数量和总金额。
| GET | https://api.snov.io/v2/pipelines |
| 此方法没有输入参数。 |
<?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 | 销售漏斗的唯一标识符。 |
name | 销售漏斗名称。 |
deals_count | 当前销售漏斗中的交易数量。 |
deals_value | 销售漏斗中所有交易的总金额。 |
created_at | 销售漏斗创建日期和时间,采用 ISO 8601 格式。 |
GET获取销售漏斗阶段列表
免费该方法显示 CRM(交易)部分中特定销售漏斗内所有阶段的列表。
| GET | https://api.snov.io/v2/pipelines/{pipeline_id}/stages |
pipeline_id | 您想要获取阶段的销售漏斗的唯一标识符。 |
<?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 | 阶段的唯一标识符。 |
pipeline_id | 此阶段所属销售漏斗的 ID。 |
name | 阶段名称。 |
order | 阶段在销售漏斗中的位置。 |
deals_count | 当前此阶段中的交易数量。 |
deals_value | 此阶段中所有交易的总金额。 |
GET查看用户余额
免费用此方法查看您的信用点数余额。
| GET | https://api.snov.io/v1/get-balance |
| 这个方法没有输入参数 |
<?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 | 用户当前的信用点数余额。 |
teamwork | 若您目前是团队成员或领导,则为“true”,若您不属于任何团队,则为“false”。 |
recipients_used | 本月已使用的唯一收件人数量。 |
limit_resets_in | 距离限额重置的天数。 |
expires_in | 距离订阅结束的天数。 |
Webhook
Webhook 可让您收到 Snov.io 账户中的事件通知。
每当 Snov.io 中有新的订阅事件时,您都可以使用 webhook 调用服务器上的端点 (URL),并将实时数据发送到您的应用程序。
事件发生时,Snov.io 会向指定的 URL 端点发送一个带有 JSON 内容的 HTTP 请求。
您可以通过一组 API 调用来订阅和管理 webhook。
目前支持的 webhook 对象和操作如下:
| Webhook 对象 | 操作 | 触发后 |
|---|---|---|
campaign_email | sent | 在任何自动化营销中向收件人发送任何邮件时 |
| first_sent | 在任何自动化营销中向收件人发送第一封邮件时 | |
| opened | 当收件人打开任何自动化营销中的任何邮件时 | |
| bounced | 当营销邮件被退回 | |
| link_clicked | 当收件人在营销邮件中点击一个链接 | |
campaign_reply | received | 当收件人回复任何营销中的任何邮件时 |
| first_received | 当收件人在任何营销中首次回复邮件时 | |
| autoreply_received | 当您收到营销邮件的自动回复时 | |
campaign_li_reply | received | 当收件人在任何营销中通过领英对连接请求、消息或领英站内信进行后续回复时 |
| first_received | 当收件人在任何营销中通过领英首次对连接请求、消息或领英站内信进行回复时 | |
campaign_li | connection_request_accepted | 当收件人接受从营销中发送的领英连接请求时 |
company | found_domains_by_names | 当您根据公司名称请求其域名时 |
prospect | found_by_li_url | 当您根据潜在客户的 领英 URL 请求其个人资料信息时 |
| found_emails_by_name_by_domain | 当您搜索潜在客户的邮箱地址时 | |
| campaign_finished | 当某个收件人的营销完成时(状态:已完成) | |
| campaign_unsubscribed | 当营销邮件的接收者退订你的邮件 | |
email_verification | verified | 当您请求邮箱验证时 |
限制: 高级套餐用户最多可以创建 50 个 webhook。
重试策略:如果系统在 3 秒内收到 200-299 范围内的 HTTP 状态 作为响应,则 webhook 成功。
如果出现了任何其他的HTTP状态或者超时错误,我们将在事件触发了webhook之后尝试7次,每次间隔高达38小时:
如果所有重试均不成功,webhook 将会停用。
- 第 1 次:事件发生后第一时间
- 第 2 次:最近一次尝试后 20 分钟(事件发生后 20 分钟)
- 第 3 次:最近一次尝试后 40 分钟(事件发生后 1 小时)
- 第 4 次:最近一次尝试后 60 分钟(事件发生后 2 小时)
- 第 5 次:最近一次尝试后 4 小时(事件发生后 6 小时)
- 第 6 次:最近一次尝试后 8 分钟(事件发生后 14 小时)
- 第 7 次:最近一次尝试后 24 分钟(事件发生后 38 小时)
GET列出所有 webhook
| GET | https://api.snov.io/v2/webhooks |
内容- 类型:application/json |
| 此方法没有输入参数。 |
{
"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
}
}
| 参数 | 数据类型 | 数据类型 |
|---|---|---|
data | array | webhook 模型集合 |
id | int | Webhook ID |
end_point | string | 您在添加 webhook 时提供的实际 URL 地址及其发送位置 |
event_object | string | 执行操作的对象 |
event_action | string | 对象的操作 |
created_at | int | Unix Timestamp 格式的 Webhook 创建日期 |
status | string | Webhook 状态:启用、停用 |
meta | object | 相关数据 |
webhooks_count | int | 您的账户中的 webhook 总数(最多 50 个) |
user_id | int | 用户 ID |
POST添加 webhook
| POST | https://api.snov.io/v2/webhooks |
内容- 类型:application/json |
event_object | 执行操作的对象(支持的对象列表) |
event_action | 对对象执行的操作(支持的操作列表) |
endpoint_url | 发送 Webhook 的 URL 地址 |
{
"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
}
}
| 参数 | 数据类型 | 数据类型 |
|---|---|---|
data | object | Webhook 数据 |
id | int | Webhook ID |
end_point | string | 您在添加 webhook 时提供的实际 URL 地址及其发送位置 |
event_object | string | 执行操作的对象 |
event_action | string | 对象的操作 |
created_at | int | Unix Timestamp 格式的 Webhook 创建日期 |
status | string | Webhook 状态:启用、停用 |
meta | object | 相关数据 |
user_id | int | 用户 ID |
PUT更改 webhook 状态
在请求 URL 地址的末尾包含所选 webhook 的唯一“id”值。
使用“列出所有 webhooks”的方法获取 webhooks 的 id 值。
| PUT | https://api.snov.io/v2/webhooks/webhook_id |
内容- 类型:application/json |
status | 启用或停用 |
{
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
}
}
| 参数 | 数据类型 | 数据类型 |
|---|---|---|
data | object | Webhook 数据 |
id | int | Webhook ID |
end_point | string | 您在添加 webhook 时提供的实际 URL 地址及其发送位置 |
event_object | string | 执行操作的对象 |
event_action | string | 对象的操作 |
created_at | int | Unix Timestamp 格式的 Webhook 创建日期 |
status | string | Webhook 状态:启用、停用 |
meta | object | 相关数据 |
user_id | int | 用户 ID |
DELETE删除一个 webhook
在请求 URL 地址的末尾包含所选 webhook 的唯一“id”值。
使用“列出所有 webhooks”的方法获取 webhooks 的 id 值。
| DELETE | https://api.snov.io/v2/webhooks/webhook_id |
内容- 类型:application/json |
{
https://api.snov.io/v2/webhooks/8
}
{
"data": {
"success": true
}
}
| 参数 | 数据类型 | 数据类型 |
|---|---|---|
success | boolean | 显示是否删除了 webhook |

