API Reference
VINCTA receives compliance data via webhooks from vendor systems. All webhooks use HMAC-SHA256 authentication.
Base URL: https://app.vincta.io
Authentication
HMAC-SHA256 Signature
All webhook requests must include a signature header computed over the raw request body.
const crypto = require('crypto');
function verifySignature(payload, signature, secret) {
const expected = crypto
.createHmac('sha256', secret)
.update(payload, 'utf8')
.digest('hex');
return crypto.timingSafeEqual(
Buffer.from(signature),
Buffer.from(expected)
);
}Signature Headers by Vendor
| Vendor | Header Name |
|---|---|
| Unit21 | X-Signature-256 |
| HAWK AI | X-Signature-256 |
| Alloy | Alloy-Webhook-Secret |
| ComplyAdvantage | X-CA-Signature |
Webhook Endpoints
Transaction Monitoring
Unit21: POST /api/webhooks/unit21
HAWK AI: POST /api/webhooks/hawk-ai
KYC Decisions
Alloy: POST /api/webhooks/alloy
Screening Hits
ComplyAdvantage: POST /api/webhooks/complyadvantage
Response Format
Success (200)
{
"status": "accepted",
"vincta_alert_id": "550e8400-e29b-41d4-a716-446655440000",
"case_id": "660e8400-e29b-41d4-a716-446655440001",
"case_number": "CASE-2024-0042"
}Error Responses
| HTTP Status | Code | Description |
|---|---|---|
| 400 | BAD_REQUEST | Malformed request body |
| 401 | UNAUTHORIZED | Invalid or missing signature |
| 409 | DUPLICATE_ALERT | Alert already processed |
| 429 | RATE_LIMITED | Rate limit exceeded |
| 500 | INTERNAL_ERROR | Server error |
Rate Limits
| Scope | Limit |
|---|---|
| All webhooks | 1,000 requests/minute |
| Per vendor | 500 requests/minute |
Vendor Configuration
Unit21
- Navigate to Settings → Webhooks
- Add endpoint:
https://app.vincta.io/api/webhooks/unit21 - Select events:
alert.created,alert.updated - Copy webhook secret to VINCTA settings
Alloy
- Navigate to Settings → Webhooks
- Add endpoint:
https://app.vincta.io/api/webhooks/alloy - Select events:
evaluation.completed
HAWK AI
- Navigate to Administration → Integrations
- Add HTTP endpoint:
https://app.vincta.io/api/webhooks/hawk-ai - Configure shared secret authentication
ComplyAdvantage
- Navigate to Settings → API & Webhooks
- Add webhook URL:
https://app.vincta.io/api/webhooks/complyadvantage - Select events:
screening.hit,screening.updated
Retry Policy
| Response | Action |
|---|---|
| 2xx | Success, no retry |
| 4xx | Client error, no retry (except 429) |
| 429 | Retry after retry_after seconds |
| 5xx | Retry with exponential backoff |