Mail Outreach
13 endpoints from the published OpenAPI import.
List Outreach Connections
List every outreach sidecar for this brand, newest first.
Parameters
| Name | In | Type | Required | Description |
|---|---|---|---|---|
brand_id | path | integer | true |
Try it
Examples
cURL
curl -X GET 'https://spideriq.ai/api/v1/brands/{brand_id}/mail/outreach/connections' \
-H 'Authorization: Bearer <token>'Python
import httpx
resp = httpx.get(
"https://spideriq.ai/api/v1/brands/{brand_id}/mail/outreach/connections",
headers={"Authorization": "Bearer <token>"},
)
resp.raise_for_status()
print(resp.json())JavaScript
const resp = await fetch("https://spideriq.ai/api/v1/brands/{brand_id}/mail/outreach/connections", {
method: "GET",
headers: { "Authorization": "Bearer <token>" }
});
const data = await resp.json();
console.log(data);Go
package main
import (
"net/http"
)
func main() {
req, _ := http.NewRequest("GET", "https://spideriq.ai/api/v1/brands/{brand_id}/mail/outreach/connections", nil)
req.Header.Set("Authorization", "Bearer <token>")
resp, _ := http.DefaultClient.Do(req)
defer resp.Body.Close()
}Responses
| Status | Description |
|---|---|
200 | Successful Response |
422 | Validation Error |
Get Outreach Connection
Parameters
| Name | In | Type | Required | Description |
|---|---|---|---|---|
brand_id | path | integer | true | |
connection_id | path | integer | true |
Try it
Examples
cURL
curl -X GET 'https://spideriq.ai/api/v1/brands/{brand_id}/mail/outreach/connections/{connection_id}' \
-H 'Authorization: Bearer <token>'Python
import httpx
resp = httpx.get(
"https://spideriq.ai/api/v1/brands/{brand_id}/mail/outreach/connections/{connection_id}",
headers={"Authorization": "Bearer <token>"},
)
resp.raise_for_status()
print(resp.json())JavaScript
const resp = await fetch("https://spideriq.ai/api/v1/brands/{brand_id}/mail/outreach/connections/{connection_id}", {
method: "GET",
headers: { "Authorization": "Bearer <token>" }
});
const data = await resp.json();
console.log(data);Go
package main
import (
"net/http"
)
func main() {
req, _ := http.NewRequest("GET", "https://spideriq.ai/api/v1/brands/{brand_id}/mail/outreach/connections/{connection_id}", nil)
req.Header.Set("Authorization", "Bearer <token>")
resp, _ := http.DefaultClient.Do(req)
defer resp.Body.Close()
}Responses
| Status | Description |
|---|---|
200 | Successful Response |
422 | Validation Error |
Update Outreach Connection
Edit workspace_id / warmup_tag / lemwarm_domains / is_active.
Parameters
| Name | In | Type | Required | Description |
|---|---|---|---|---|
brand_id | path | integer | true | |
connection_id | path | integer | true |
Try it
Examples
cURL
curl -X PATCH 'https://spideriq.ai/api/v1/brands/{brand_id}/mail/outreach/connections/{connection_id}' \
-H 'Authorization: Bearer <token>' \
-H 'Content-Type: application/json' \
-d '{
"workspace_id": "string",
"warmup_tag": "string",
"lemwarm_domains": [
"string"
],
"is_active": true,
"smartlead_client_id": "string",
"max_active_leads": 0
}'Python
import httpx
resp = httpx.patch(
"https://spideriq.ai/api/v1/brands/{brand_id}/mail/outreach/connections/{connection_id}",
headers={"Authorization": "Bearer <token>", "Content-Type": "application/json"},
json={"workspace_id": "string", "warmup_tag": "string", "lemwarm_domains": ["string"], "is_active": true, "smartlead_client_id": "string", "max_active_leads": 0},
)
resp.raise_for_status()
print(resp.json())JavaScript
const resp = await fetch("https://spideriq.ai/api/v1/brands/{brand_id}/mail/outreach/connections/{connection_id}", {
method: "PATCH",
headers: { "Authorization": "Bearer <token>", "Content-Type": "application/json" },
body: JSON.stringify({"workspace_id": "string", "warmup_tag": "string", "lemwarm_domains": ["string"], "is_active": true, "smartlead_client_id": "string", "max_active_leads": 0})
});
const data = await resp.json();
console.log(data);Go
package main
import (
"net/http"
"strings"
)
func main() {
body := strings.NewReader(`{"workspace_id": "string", "warmup_tag": "string", "lemwarm_domains": ["string"], "is_active": true, "smartlead_client_id": "string", "max_active_leads": 0}`)
req, _ := http.NewRequest("PATCH", "https://spideriq.ai/api/v1/brands/{brand_id}/mail/outreach/connections/{connection_id}", body)
req.Header.Set("Authorization", "Bearer <token>")
req.Header.Set("Content-Type", "application/json")
resp, _ := http.DefaultClient.Do(req)
defer resp.Body.Close()
}Responses
| Status | Description |
|---|---|
200 | Successful Response |
422 | Validation Error |
Delete Outreach Connection
Remove the outreach sidecar. Leaves api_integrations intact (user must delete the integration itself via IntegrationsTab to remove credentials). FK cascades senders + campaigns + health_snapshots on this sidecar.
Parameters
| Name | In | Type | Required | Description |
|---|---|---|---|---|
brand_id | path | integer | true | |
connection_id | path | integer | true |
Try it
Examples
cURL
curl -X DELETE 'https://spideriq.ai/api/v1/brands/{brand_id}/mail/outreach/connections/{connection_id}' \
-H 'Authorization: Bearer <token>'Python
import httpx
resp = httpx.delete(
"https://spideriq.ai/api/v1/brands/{brand_id}/mail/outreach/connections/{connection_id}",
headers={"Authorization": "Bearer <token>"},
)
resp.raise_for_status()
print(resp.json())JavaScript
const resp = await fetch("https://spideriq.ai/api/v1/brands/{brand_id}/mail/outreach/connections/{connection_id}", {
method: "DELETE",
headers: { "Authorization": "Bearer <token>" }
});
const data = await resp.json();
console.log(data);Go
package main
import (
"net/http"
)
func main() {
req, _ := http.NewRequest("DELETE", "https://spideriq.ai/api/v1/brands/{brand_id}/mail/outreach/connections/{connection_id}", nil)
req.Header.Set("Authorization", "Bearer <token>")
resp, _ := http.DefaultClient.Do(req)
defer resp.Body.Close()
}Responses
| Status | Description |
|---|---|
200 | Successful Response |
422 | Validation Error |
Sync Outreach Connection
Call adapter.list_senders(), upsert into mail_outreach_senders, and try to resolve each sender's email against mail_mailboxes for this brand's clients (so the classifier can key off mailbox_id).
Parameters
| Name | In | Type | Required | Description |
|---|---|---|---|---|
brand_id | path | integer | true | |
connection_id | path | integer | true |
Try it
Examples
cURL
curl -X POST 'https://spideriq.ai/api/v1/brands/{brand_id}/mail/outreach/connections/{connection_id}/sync' \
-H 'Authorization: Bearer <token>'Python
import httpx
resp = httpx.post(
"https://spideriq.ai/api/v1/brands/{brand_id}/mail/outreach/connections/{connection_id}/sync",
headers={"Authorization": "Bearer <token>"},
)
resp.raise_for_status()
print(resp.json())JavaScript
const resp = await fetch("https://spideriq.ai/api/v1/brands/{brand_id}/mail/outreach/connections/{connection_id}/sync", {
method: "POST",
headers: { "Authorization": "Bearer <token>" }
});
const data = await resp.json();
console.log(data);Go
package main
import (
"net/http"
)
func main() {
req, _ := http.NewRequest("POST", "https://spideriq.ai/api/v1/brands/{brand_id}/mail/outreach/connections/{connection_id}/sync", nil)
req.Header.Set("Authorization", "Bearer <token>")
resp, _ := http.DefaultClient.Do(req)
defer resp.Body.Close()
}Responses
| Status | Description |
|---|---|
200 | Successful Response |
422 | Validation Error |
List Outreach Senders
All senders across every outreach connection on this brand.
Parameters
| Name | In | Type | Required | Description |
|---|---|---|---|---|
brand_id | path | integer | true |
Try it
Examples
cURL
curl -X GET 'https://spideriq.ai/api/v1/brands/{brand_id}/mail/outreach/senders' \
-H 'Authorization: Bearer <token>'Python
import httpx
resp = httpx.get(
"https://spideriq.ai/api/v1/brands/{brand_id}/mail/outreach/senders",
headers={"Authorization": "Bearer <token>"},
)
resp.raise_for_status()
print(resp.json())JavaScript
const resp = await fetch("https://spideriq.ai/api/v1/brands/{brand_id}/mail/outreach/senders", {
method: "GET",
headers: { "Authorization": "Bearer <token>" }
});
const data = await resp.json();
console.log(data);Go
package main
import (
"net/http"
)
func main() {
req, _ := http.NewRequest("GET", "https://spideriq.ai/api/v1/brands/{brand_id}/mail/outreach/senders", nil)
req.Header.Set("Authorization", "Bearer <token>")
resp, _ := http.DefaultClient.Do(req)
defer resp.Body.Close()
}Responses
| Status | Description |
|---|---|
200 | Successful Response |
422 | Validation Error |
Get Sender Health
Time-series for a single sender's health card.
days bounds the history returned (default 30 — matches the Slice F detail chart). The most-recent snapshot is duplicated into latest so the client doesn't have to index into history[0].
Parameters
| Name | In | Type | Required | Description |
|---|---|---|---|---|
brand_id | path | integer | true | |
sender_id | path | integer | true | |
days | query | integer | false |
Try it
Examples
cURL
curl -X GET 'https://spideriq.ai/api/v1/brands/{brand_id}/mail/outreach/senders/{sender_id}/health' \
-H 'Authorization: Bearer <token>'Python
import httpx
resp = httpx.get(
"https://spideriq.ai/api/v1/brands/{brand_id}/mail/outreach/senders/{sender_id}/health",
headers={"Authorization": "Bearer <token>"},
)
resp.raise_for_status()
print(resp.json())JavaScript
const resp = await fetch("https://spideriq.ai/api/v1/brands/{brand_id}/mail/outreach/senders/{sender_id}/health", {
method: "GET",
headers: { "Authorization": "Bearer <token>" }
});
const data = await resp.json();
console.log(data);Go
package main
import (
"net/http"
)
func main() {
req, _ := http.NewRequest("GET", "https://spideriq.ai/api/v1/brands/{brand_id}/mail/outreach/senders/{sender_id}/health", nil)
req.Header.Set("Authorization", "Bearer <token>")
resp, _ := http.DefaultClient.Do(req)
defer resp.Body.Close()
}Responses
| Status | Description |
|---|---|
200 | Successful Response |
422 | Validation Error |
Get Warmup Trend
Per-brand daily warmup/deliverability time-series (#26/#32).
Buckets the brand's snapshots by UTC day, summing the 24h send/inbox counters and averaging the health score. Feeds the outreach Warmup chart AND the security 30-day trend. Hits idx_health_snapshots_brand_polled via the (brands_id, polled_at) range; date_trunc is in SELECT/GROUP BY only, so the index range scan on polled_at is preserved.
Parameters
| Name | In | Type | Required | Description |
|---|---|---|---|---|
brand_id | path | integer | true | |
days | query | integer | false | Trailing window in days. |
Try it
Examples
cURL
curl -X GET 'https://spideriq.ai/api/v1/brands/{brand_id}/mail/outreach/warmup-trend' \
-H 'Authorization: Bearer <token>'Python
import httpx
resp = httpx.get(
"https://spideriq.ai/api/v1/brands/{brand_id}/mail/outreach/warmup-trend",
headers={"Authorization": "Bearer <token>"},
)
resp.raise_for_status()
print(resp.json())JavaScript
const resp = await fetch("https://spideriq.ai/api/v1/brands/{brand_id}/mail/outreach/warmup-trend", {
method: "GET",
headers: { "Authorization": "Bearer <token>" }
});
const data = await resp.json();
console.log(data);Go
package main
import (
"net/http"
)
func main() {
req, _ := http.NewRequest("GET", "https://spideriq.ai/api/v1/brands/{brand_id}/mail/outreach/warmup-trend", nil)
req.Header.Set("Authorization", "Bearer <token>")
resp, _ := http.DefaultClient.Do(req)
defer resp.Body.Close()
}Responses
| Status | Description |
|---|---|
200 | Successful Response |
422 | Validation Error |
Get Health Overview
Brand outreach overview envelope: the per-sender grid plus brand-level deltas (#23) and quota (#24).
senders is the latest snapshot per sender (one row per sender — powers the HealthCards grid, hits idx_health_snapshots_sender_polled via DISTINCT ON). deltas is this-7d vs prior-7d; quota is 30d send volume vs the plan cap.
Parameters
| Name | In | Type | Required | Description |
|---|---|---|---|---|
brand_id | path | integer | true |
Try it
Examples
cURL
curl -X GET 'https://spideriq.ai/api/v1/brands/{brand_id}/mail/outreach/health/overview' \
-H 'Authorization: Bearer <token>'Python
import httpx
resp = httpx.get(
"https://spideriq.ai/api/v1/brands/{brand_id}/mail/outreach/health/overview",
headers={"Authorization": "Bearer <token>"},
)
resp.raise_for_status()
print(resp.json())JavaScript
const resp = await fetch("https://spideriq.ai/api/v1/brands/{brand_id}/mail/outreach/health/overview", {
method: "GET",
headers: { "Authorization": "Bearer <token>" }
});
const data = await resp.json();
console.log(data);Go
package main
import (
"net/http"
)
func main() {
req, _ := http.NewRequest("GET", "https://spideriq.ai/api/v1/brands/{brand_id}/mail/outreach/health/overview", nil)
req.Header.Set("Authorization", "Bearer <token>")
resp, _ := http.DefaultClient.Do(req)
defer resp.Body.Close()
}Responses
| Status | Description |
|---|---|
200 | Successful Response |
422 | Validation Error |
List Remote Campaigns
Campaigns visible to this connection — powers the 'pick a campaign' picker.
Parameters
| Name | In | Type | Required | Description |
|---|---|---|---|---|
brand_id | path | integer | true | |
connection_id | path | integer | true |
Try it
Examples
cURL
curl -X GET 'https://spideriq.ai/api/v1/brands/{brand_id}/mail/outreach/connections/{connection_id}/campaigns' \
-H 'Authorization: Bearer <token>'Python
import httpx
resp = httpx.get(
"https://spideriq.ai/api/v1/brands/{brand_id}/mail/outreach/connections/{connection_id}/campaigns",
headers={"Authorization": "Bearer <token>"},
)
resp.raise_for_status()
print(resp.json())JavaScript
const resp = await fetch("https://spideriq.ai/api/v1/brands/{brand_id}/mail/outreach/connections/{connection_id}/campaigns", {
method: "GET",
headers: { "Authorization": "Bearer <token>" }
});
const data = await resp.json();
console.log(data);Go
package main
import (
"net/http"
)
func main() {
req, _ := http.NewRequest("GET", "https://spideriq.ai/api/v1/brands/{brand_id}/mail/outreach/connections/{connection_id}/campaigns", nil)
req.Header.Set("Authorization", "Bearer <token>")
resp, _ := http.DefaultClient.Do(req)
defer resp.Body.Close()
}Responses
| Status | Description |
|---|---|
200 | Successful Response |
422 | Validation Error |
Get Push Status
Quota usage + per-campaign push counts for this connection.
Parameters
| Name | In | Type | Required | Description |
|---|---|---|---|---|
brand_id | path | integer | true | |
connection_id | path | integer | true |
Try it
Examples
cURL
curl -X GET 'https://spideriq.ai/api/v1/brands/{brand_id}/mail/outreach/connections/{connection_id}/push-status' \
-H 'Authorization: Bearer <token>'Python
import httpx
resp = httpx.get(
"https://spideriq.ai/api/v1/brands/{brand_id}/mail/outreach/connections/{connection_id}/push-status",
headers={"Authorization": "Bearer <token>"},
)
resp.raise_for_status()
print(resp.json())JavaScript
const resp = await fetch("https://spideriq.ai/api/v1/brands/{brand_id}/mail/outreach/connections/{connection_id}/push-status", {
method: "GET",
headers: { "Authorization": "Bearer <token>" }
});
const data = await resp.json();
console.log(data);Go
package main
import (
"net/http"
)
func main() {
req, _ := http.NewRequest("GET", "https://spideriq.ai/api/v1/brands/{brand_id}/mail/outreach/connections/{connection_id}/push-status", nil)
req.Header.Set("Authorization", "Bearer <token>")
resp, _ := http.DefaultClient.Do(req)
defer resp.Body.Close()
}Responses
| Status | Description |
|---|---|
200 | Successful Response |
422 | Validation Error |
Push Campaign Leads
Push a SpiderIQ campaign's verified leads into the chosen remote campaign.
Parameters
| Name | In | Type | Required | Description |
|---|---|---|---|---|
brand_id | path | integer | true | |
connection_id | path | integer | true |
Try it
Examples
cURL
curl -X POST 'https://spideriq.ai/api/v1/brands/{brand_id}/mail/outreach/connections/{connection_id}/push' \
-H 'Authorization: Bearer <token>' \
-H 'Content-Type: application/json' \
-d '{
"spideriq_campaign_id": "string",
"remote_campaign_id": "string",
"smartlead_campaign_name": "string",
"limit": 0,
"only_with_vayapin_seo": false,
"only_with_vayapin_pin": false
}'Python
import httpx
resp = httpx.post(
"https://spideriq.ai/api/v1/brands/{brand_id}/mail/outreach/connections/{connection_id}/push",
headers={"Authorization": "Bearer <token>", "Content-Type": "application/json"},
json={"spideriq_campaign_id": "string", "remote_campaign_id": "string", "smartlead_campaign_name": "string", "limit": 0, "only_with_vayapin_seo": false, "only_with_vayapin_pin": false},
)
resp.raise_for_status()
print(resp.json())JavaScript
const resp = await fetch("https://spideriq.ai/api/v1/brands/{brand_id}/mail/outreach/connections/{connection_id}/push", {
method: "POST",
headers: { "Authorization": "Bearer <token>", "Content-Type": "application/json" },
body: JSON.stringify({"spideriq_campaign_id": "string", "remote_campaign_id": "string", "smartlead_campaign_name": "string", "limit": 0, "only_with_vayapin_seo": false, "only_with_vayapin_pin": false})
});
const data = await resp.json();
console.log(data);Go
package main
import (
"net/http"
"strings"
)
func main() {
body := strings.NewReader(`{"spideriq_campaign_id": "string", "remote_campaign_id": "string", "smartlead_campaign_name": "string", "limit": 0, "only_with_vayapin_seo": false, "only_with_vayapin_pin": false}`)
req, _ := http.NewRequest("POST", "https://spideriq.ai/api/v1/brands/{brand_id}/mail/outreach/connections/{connection_id}/push", body)
req.Header.Set("Authorization", "Bearer <token>")
req.Header.Set("Content-Type", "application/json")
resp, _ := http.DefaultClient.Do(req)
defer resp.Body.Close()
}Responses
| Status | Description |
|---|---|
200 | Successful Response |
422 | Validation Error |
Remove Campaign Leads
Remove tracked leads from a remote campaign (frees account lead credits).
Parameters
| Name | In | Type | Required | Description |
|---|---|---|---|---|
brand_id | path | integer | true | |
connection_id | path | integer | true |
Try it
Examples
cURL
curl -X POST 'https://spideriq.ai/api/v1/brands/{brand_id}/mail/outreach/connections/{connection_id}/remove' \
-H 'Authorization: Bearer <token>' \
-H 'Content-Type: application/json' \
-d '{
"remote_campaign_id": "string",
"spideriq_campaign_id": "string",
"emails": [
"string"
]
}'Python
import httpx
resp = httpx.post(
"https://spideriq.ai/api/v1/brands/{brand_id}/mail/outreach/connections/{connection_id}/remove",
headers={"Authorization": "Bearer <token>", "Content-Type": "application/json"},
json={"remote_campaign_id": "string", "spideriq_campaign_id": "string", "emails": ["string"]},
)
resp.raise_for_status()
print(resp.json())JavaScript
const resp = await fetch("https://spideriq.ai/api/v1/brands/{brand_id}/mail/outreach/connections/{connection_id}/remove", {
method: "POST",
headers: { "Authorization": "Bearer <token>", "Content-Type": "application/json" },
body: JSON.stringify({"remote_campaign_id": "string", "spideriq_campaign_id": "string", "emails": ["string"]})
});
const data = await resp.json();
console.log(data);Go
package main
import (
"net/http"
"strings"
)
func main() {
body := strings.NewReader(`{"remote_campaign_id": "string", "spideriq_campaign_id": "string", "emails": ["string"]}`)
req, _ := http.NewRequest("POST", "https://spideriq.ai/api/v1/brands/{brand_id}/mail/outreach/connections/{connection_id}/remove", body)
req.Header.Set("Authorization", "Bearer <token>")
req.Header.Set("Content-Type", "application/json")
resp, _ := http.DefaultClient.Do(req)
defer resp.Body.Close()
}Responses
| Status | Description |
|---|---|
200 | Successful Response |
422 | Validation Error |