Integrate voice identity protection into your platform with our REST API. Base URL: https://api.voiceseal.io/api/v1
All API requests require a JWT Bearer token obtained via login.
POST /auth/login
Content-Type: application/json
{
"email": "[email protected]",
"password": "your_password"
}
// Response
{
"access_token": "eyJ...",
"token_type": "bearer",
"user_id": "uuid"
}
Include the token in all subsequent requests: Authorization: Bearer <token>
Enroll and manage voice prints.
/voices/enroll
Enroll a new voice. Requires multipart/form-data with audio file. Biometric consent must be granted first.
/voices
List all enrolled voices for the authenticated user.
/voices/{voice_id}
Remove an enrolled voice and all associated data.
Scan audio for unauthorized voice clones.
/detection/scan
Submit audio for detection. Returns match confidence, voice_id if matched, and watermark data.
// Response
{
"match": true,
"voice_id": "uuid",
"confidence": 0.97,
"watermark_detected": true,
"latency_ms": 243
}
BIPA-aligned consent management. Required before voice enrollment.
/consent/submit
Grant biometric consent. Must be called before enrollment.
/consent/withdraw
Withdraw consent and trigger data deletion per BIPA requirements.
The VoiceSeal pre-synthesis consent gate. Called by TTS platforms before generating audio to verify biometric identity, consent status, and license scope. This is VoiceSeal's patent-pending flagship capability. VoiceSeal provides an independent, synthesis-agnostic permission and provenance layer that operates across voice platforms rather than remaining limited to a single generator's ecosystem.
/api/v1/protect/pre-synthesis-check
Verify consent and license scope before synthesizing audio from a registered voice identity. Returns a cryptographic approval token on success, or authorization_denied on failure.
🔓 Public endpoint — no auth required for evaluation. Authenticated requests (Bearer or X-API-Key) receive higher rate limits and full audit logging.
This endpoint is intentionally public to allow TTS platforms to evaluate VoiceSeal's consent gate before committing to an API integration. Authenticated Developer-tier requests receive full audit logging and higher rate limits.
Request Body
{
"voice_id": "string (UUID) — the enrolled voice identity to check",
"platform_name": "string — identifying name of the calling platform",
"intended_use": "string — commercial | audiobook | podcast | music | gaming",
"license_token": "string (optional) — existing license token if already held"
}
Response — Approved (200)
{
"status": "approved",
"approval_token": "string — time-bound cryptographic token; embed in your C2PA manifest",
"voice_id": "string",
"consented": true,
"licensed": true,
"expires_at": "ISO 8601 timestamp",
"check_id": "string — audit trail reference"
}
Response — Blocked (200)
{
"status": "blocked",
"reason": "no_consent | no_license | voice_not_found | scope_mismatch",
"voice_id": "string",
"license_url": "https://voiceseal.io/licensing?voice_id={voice_id}",
"check_id": "string",
"authorization_denied": true
}
Error Codes
403 | Platform not authorized |
404 | Voice ID not found in registry |
422 | Invalid request body |
429 | Rate limit exceeded — 100 req/hour unauthenticated, 1,000 req/minute authenticated |
Related Webhook Event
pre_synthesis.blocked — fired on every hard block; includes voice_id, platform_name, check_id, and the authorization_denied flag.
approval_token in your C2PA provenance manifest. This links the generated audio to a verified consent record and supports Article 50 transparency implementation beyond simple AI-generation disclosure.
/api/v1/protect/demo/pre-synthesis-check
🔓 Public, no auth. A self-describing demo of the pre-synthesis gate for platform evaluators — returns a live example request, the full response schema, and every possible action outcome, so you can see exactly what an integration looks like without enrolling a voice or authenticating first.
Example Response (abridged)
{
"demo": true,
"endpoint": "POST /api/v1/protect/pre-synthesis-check",
"response_schema": {
"protected": "bool",
"action": "authorized | authorization_denied | no_registry_record | allow_licensed",
"authorization_denied": "bool",
"platform_decision_required": "bool — true when no registry record exists",
"license_url": "string | null",
"check_id": "uuid — hash-chained audit-trail id"
},
"possible_responses": {
"no_registry_record": { "action": "no_registry_record", "platform_decision_required": true, "...": "..." },
"protected_no_license": { "action": "blocked", "authorization_denied": true, "license_url": "...", "...": "..." },
"protected_licensed": { "action": "allow_licensed", "...": "..." }
}
}
Try it live: GET https://api.voiceseal.io/api/v1/protect/demo/pre-synthesis-check
Receive real-time detection events to your endpoint.
// Detection event payload
{
"event": "voice.detected",
"voice_id": "uuid",
"owner_id": "uuid",
"platform": "elevenlabs",
"confidence": 0.94,
"timestamp": "2026-03-10T14:32:00Z",
"audio_url": "https://...",
"action_required": true
}
Register webhooks via POST /webhooks/register with your endpoint URL and secret.