SSpiderIQ
SSpiderIQ

Docs / api-reference/send-byo-domains

Send BYO Domains

2 endpoints from the published OpenAPI import.

POST/api/v1/dashboard/send/byo/check

Dry-run the DNS checks for a sending domain (stores nothing)

Verify SPF / DKIM / tracking-CNAME without storing or binding anything.

Deliberately requires no API key: a tenant publishes records, checks, fixes and checks again, and none of that iteration should be gated on handing us a credential first.

⚠️ A null verdict on any check means UNDETERMINABLE, not "fine" — see RecordCheckOut.ok. verified is true only when every check is true.

Try it

Examples

cURL
curl -X POST 'https://spideriq.ai/api/v1/dashboard/send/byo/check' \
  -H 'Authorization: Bearer <token>' \
  -H 'Content-Type: application/json' \
  -d '{
  "domain": "string",
  "provider": "mailgun",
  "dkim_selector": "mailo",
  "tracking_domain": "string"
}'
Python
import httpx

resp = httpx.post(
    "https://spideriq.ai/api/v1/dashboard/send/byo/check",
    headers={"Authorization": "Bearer <token>", "Content-Type": "application/json"},
    json={"domain": "string", "provider": "mailgun", "dkim_selector": "mailo", "tracking_domain": "string"},
)
resp.raise_for_status()
print(resp.json())
JavaScript
const resp = await fetch("https://spideriq.ai/api/v1/dashboard/send/byo/check", {
  method: "POST",
  headers: { "Authorization": "Bearer <token>", "Content-Type": "application/json" },
  body: JSON.stringify({"domain": "string", "provider": "mailgun", "dkim_selector": "mailo", "tracking_domain": "string"})
});
const data = await resp.json();
console.log(data);
Go
package main

import (
	"net/http"
	"strings"
)

func main() {
	body := strings.NewReader(`{"domain": "string", "provider": "mailgun", "dkim_selector": "mailo", "tracking_domain": "string"}`)
	req, _ := http.NewRequest("POST", "https://spideriq.ai/api/v1/dashboard/send/byo/check", body)
	req.Header.Set("Authorization", "Bearer <token>")
	req.Header.Set("Content-Type", "application/json")
	resp, _ := http.DefaultClient.Do(req)
	defer resp.Body.Close()
}

Responses

StatusDescription
200Successful Response
422Validation Error
POST/api/v1/dashboard/send/byo/enroll

Verify a domain, store the tenant's credential, and bind their source

The whole onboarding step, in the one order that is safe.

Nothing is written unless the DNS verifies. Then the credential is stored BEFORE the source is bound — a source bound to a tenant with no stored credential resolves as "no binding", whose one documented fallback is the PLATFORM adapter, which would put this tenant's mail on the platform's key and domain. See the service module's order note.

201 rather than 200: this creates a tenant-scoped sending identity.

Try it

Examples

cURL
curl -X POST 'https://spideriq.ai/api/v1/dashboard/send/byo/enroll' \
  -H 'Authorization: Bearer <token>' \
  -H 'Content-Type: application/json' \
  -d '{
  "mailbox_id": 0,
  "domain": "string",
  "api_key": "string",
  "provider": "mailgun",
  "dkim_selector": "mailo",
  "tracking_domain": "string",
  "enable_tracking": true,
  "api_base": "",
  "brand_id": 0
}'
Python
import httpx

resp = httpx.post(
    "https://spideriq.ai/api/v1/dashboard/send/byo/enroll",
    headers={"Authorization": "Bearer <token>", "Content-Type": "application/json"},
    json={"mailbox_id": 0, "domain": "string", "api_key": "string", "provider": "mailgun", "dkim_selector": "mailo", "tracking_domain": "string", "enable_tracking": true, "api_base": "", "brand_id": 0},
)
resp.raise_for_status()
print(resp.json())
JavaScript
const resp = await fetch("https://spideriq.ai/api/v1/dashboard/send/byo/enroll", {
  method: "POST",
  headers: { "Authorization": "Bearer <token>", "Content-Type": "application/json" },
  body: JSON.stringify({"mailbox_id": 0, "domain": "string", "api_key": "string", "provider": "mailgun", "dkim_selector": "mailo", "tracking_domain": "string", "enable_tracking": true, "api_base": "", "brand_id": 0})
});
const data = await resp.json();
console.log(data);
Go
package main

import (
	"net/http"
	"strings"
)

func main() {
	body := strings.NewReader(`{"mailbox_id": 0, "domain": "string", "api_key": "string", "provider": "mailgun", "dkim_selector": "mailo", "tracking_domain": "string", "enable_tracking": true, "api_base": "", "brand_id": 0}`)
	req, _ := http.NewRequest("POST", "https://spideriq.ai/api/v1/dashboard/send/byo/enroll", body)
	req.Header.Set("Authorization", "Bearer <token>")
	req.Header.Set("Content-Type", "application/json")
	resp, _ := http.DefaultClient.Do(req)
	defer resp.Body.Close()
}

Responses

StatusDescription
201Successful Response
422Validation Error