Send BYO Domains
2 endpoints from the published OpenAPI import.
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
| Status | Description |
|---|---|
200 | Successful Response |
422 | Validation Error |
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
| Status | Description |
|---|---|
201 | Successful Response |
422 | Validation Error |