Authentication & Connections
Configure your HuskyVoice AI environment by accessing your credentials and setting up communication channels. All settings mentioned below can be managed on the Integrations page of your Dashboard.
- API Keys
- Inbound Webhooks
- Outbound (Webhooks)
API Key Setup
API keys grant programmatic access to HuskyVoice services.
- Go to Integrations > API Key tab.
- Click Generate New Key.
- Copy the secret key immediately — it will not be shown again.
Usage:
Pass the key in the Authorization header:
Authorization: Bearer YOUR_API_KEY
Inbound Webhook URLs
Trigger AI actions (creating or cancelling calls) from third-party tools like Zapier or custom CRM workflows.
- Go to Integrations > Inbound Webhooks tab.
- Copy your unique Inbound URL.
- Use this URL as the destination for your POST requests.
Example Endpoint:
https://api.huskyvoice.ai/v1/hooks/{YOUR_SECRET_TOKEN}
Outbound Webhook Events
Outbound Webhooks allow HuskyVoice to send real-time data back to your server.
- Go to Integrations > Webhook (Outbound) tab.
- Enter your Endpoint URL.
- Select events (e.g.,
call.completed). - Copy the Webhook Secret for verification.
Signature Verification
HuskyVoice includes an X-Husky-Signature header to verify authenticity.
- cURL
- Python
- Node.js
- n8n
# Generate expected signature for a given payload
SECRET="YOUR_WEBHOOK_SECRET"
PAYLOAD='{"event_id":"evt_123","event_type":"call.completed"}'
echo -n "$PAYLOAD" | openssl dgst -sha256 -hmac "$SECRET"
# Compare the output hex digest with the X-Husky-Signature header value
import hmac
import hashlib
def verify(payload: str, sig: str, secret: str) -> bool:
expected = hmac.new(
secret.encode(),
payload.encode(),
hashlib.sha256
).hexdigest()
return hmac.compare_digest(sig, expected)
const crypto = require('crypto');
function verify(payload, sig, secret) {
const hmac = crypto.createHmac('sha256', secret).update(payload).digest('hex');
return crypto.timingSafeEqual(Buffer.from(sig), Buffer.from(hmac));
}
// n8n Code node — place after your Webhook trigger node
const crypto = require("crypto");
const secret = "YOUR_WEBHOOK_SECRET";
const payload = JSON.stringify($input.first().json.body);
const receivedSig = $input.first().json.headers["x-husky-signature"];
const expectedSig = crypto
.createHmac("sha256", secret)
.update(payload)
.digest("hex");
const isValid = crypto.timingSafeEqual(
Buffer.from(receivedSig),
Buffer.from(expectedSig)
);
if (!isValid) {
throw new Error("Invalid webhook signature — request rejected");
}
return $input.all();
Technical Configuration Table
| Integration Point | Authentication Method | Primary Use Case |
|---|---|---|
| Call API | Bearer Token (API Key) | Complex backend logic & scheduling. |
| Inbound Webhooks | Unique URL ID | No-code tools & simple CRM triggers. |
| Outbound Webhooks | HMAC-SHA256 Signature | Real-time status sync & outcome logging. |
Never share your API keys or Webhook secrets in public repositories or client-side code. Always use environment variables on your server.