Queue, domains & webhooks.
The send queue, domain health checks, and — explicitly — what outbound webhooks exist today (none) versus what’s planned.
GET /v1/queue/status reports real BullMQ counts, pause state, and throttling (cadenceFloorSeconds: 480, jitterSeconds); POST /v1/queue/pause is a genuine Redis-level pause. Domain routes cover SPF/DKIM/DMARC + blocklist checks (keyed by domain name) and seed-inbox placement sampling (keyed by id). Outbound webhooks — WarmHawk calling your URL on an event — are Planned; no such system exists in core-engine yet.
Queue
| Route | What it does |
|---|---|
| GET /v1/queue/status | Returns { counts, isPaused, jobs, throttling: { cadenceFloorSeconds: 480, jitterSeconds } }. |
| POST /v1/queue/pause | Body: { paused: boolean }. Real BullMQ pause/resume, not cosmetic. |
API details (Tier 0 / self-hosters) · GET /v1/queue/status — response shape▸
{
"counts": { "waiting": 3, "active": 1, "delayed": 12, "completed": 240, "failed": 2 },
"isPaused": false,
"jobs": [ /* up to 50 waiting/active/delayed jobs */ ],
"throttling": { "cadenceFloorSeconds": 480, "jitterSeconds": 240 }
}Domains
| Route | What it does |
|---|---|
| GET /v1/domains | List every sending domain on the account, each with mailingAddress, label and usedBy (the campaigns sending from it). |
| POST /v1/domains | Create. Body: { domainName, redirectUrl?, dkimSelector?, label?, mailingAddress?, mailingAddressParts? }. The address is optional here. dkimSelector is the part before ._domainkey; 422 if it is not a valid DNS label. |
| PATCH /v1/domains/:id | Update redirectUrl, dkimSelector, label or the mailing address. Only fields present change; dkimSelector null or "" clears it. Clearing an address that campaigns send with returns 409 ADDRESS_IN_USE unless confirm: true. |
| POST /v1/domains/:domain/check | Keyed by domain NAME, not id. Unified SPF/DKIM/DMARC + blocklist check. DKIM uses ?selector= if given, else the saved dkimSelector, else tries common provider selectors (a miss is PENDING). Also runs hourly on its own. |
| GET /v1/domains/:id/placement-sample | Keyed by id. Seed-inbox placement sampling rollup — explicitly labeled as sampling, not exhaustive testing. |
Note the key: domain checks use the domain name (POST /v1/domains/yourcompany.com/check), placement sampling uses the domain id (GET /v1/domains/dom_a1b2c3/placement-sample) — every other domain route in this table is id-keyed. Full walkthrough with response bodies: Sending safely & domain health.
Webhooks — Planned
No outbound webhook system exists in warmhawk-core-engine today — there is no route to register a callback URL and no event dispatcher that calls it. If you need to react to a WarmHawk event today (a new reply, a send completing, a domain going unhealthy), poll the relevant GET route instead: GET /v1/replies, GET /v1/queue/status, or GET /v1/domains/:id/placement-sample. This section exists to say so plainly rather than leave the gap undocumented.
Back to Leads & campaigns or Auth & mailboxes.