DialSwarm / Compliance / API
DialSwarm API v1
Base URL: https://dialswarm.com/api/v1. Everything is JSON over HTTPS.
Authentication
Create a key in the workspace under Integrations, API keys, and send it as Authorization: Bearer dsk_.... Creating a key asks you to tick the consent confirmation. When ticked, it is stored and covers every lead sent with that key: "I confirm every number in this list gave prior express written consent to be called by [your company] using an automated or AI voice, and I accept responsibility for that consent." Keys can be revoked at any time. Limit: 60 requests per minute per key (HTTP 429 with Retry-After).
Errors look like { "error": "plain English", "reasons": ["..."] }.
GET /me
Checks the key. Returns { "account": { "id", "email", "company" }, "plan": "basic" }.
GET /campaigns
Returns [ { "id", "name", "status" } ].
POST /leads
Adds one lead with its consent record. The call still has to pass every compliance check when it is dialed (Do Not Call, calling hours in the person's time zone, caller ID).
curl -X POST https://dialswarm.com/api/v1/leads \
-H "Authorization: Bearer dsk_..." -H "Content-Type: application/json" \
-d '{
"name": "Jordan Lee", "phone": "+14155551234", "company": "Globex",
"campaign_name": "Zapier leads",
"consent_source": "Web form on globex.com",
"consent_date": "2026-09-01",
"consent_business_name": "Your Company Inc"
}'
Required: phone. Send the consent record with every lead: consent_source (free text), consent_date (YYYY-MM-DD, not in the future) and consent_business_name (your company name, or include consent_override_reason). If a consent field is missing, the lead is still saved with "Entered by the account user", today's date and your company name, so send the real values. Use campaign_id or campaign_name (found or created). Returns 201 with { "id", "campaign_id", "status": "queued" }, or 422 with the reasons.
Webhooks (REST hooks)
POST /hooks with { "target_url": "https://...", "event": "call.completed" } (or meeting.booked) returns 201 with { "id", "secret" }. DELETE /hooks/:id returns 204. Each delivery is a POST of { "event", "id", "created_at", "data" } with the header X-DialSwarm-Signature: sha256=<hex HMAC-SHA256 of the raw body using your hook secret>. A 2xx response is success. Failures are retried after 1 minute, 10 minutes and 1 hour.
Sample data
GET /calls/recent?limit=3 returns the newest completed calls (id, status, outcome, summary, lead, durations, transcript_url, agent). GET /meetings/recent?limit=3 returns booked meetings. Outcomes: interested, not_interested, callback, voicemail, no_answer, busy, rejected, screened, wrong_number, dnc_request, transferred, unknown.
Compliance
The API cannot be used to skip consent. Every lead is saved with a consent record, keys created with the consent confirmation carry a stored attestation, and the platform's other safeguards run at dial time. See Compliance, Terms and Privacy. Questions: [email protected].