POST /v1/precall
Verify a call is allowed before dialing. Returns the consent status, disclosure script, and a decision ID. Read more
eConsent Voice is the TCPA compliance API for outbound calling. It covers the entire call lifecycle: pre-dial consent verification, in-call verbal consent capture, real-time revocation propagation, and post-call evidence packaging.
https://voice.econsent.org/v1All endpoints (except /v1/register and /v1/health) require a Bearer token:
Authorization: Bearer ec_voice_YOUR_KEYGet a free API key by calling POST /v1/register or signing up at econsent.org/voice.
POST /v1/precall
Verify a call is allowed before dialing. Returns the consent status, disclosure script, and a decision ID. Read more
POST /v1/capture-verbal
Capture verbal consent during a call. The classifier verifies the consent is genuine and non-coerced. Read more
POST /v1/revoke
Revoke consent when a consumer opts out. Propagates across the network and starts the FCC honor window. Read more
POST /v1/post-call
Store the call evidence bundle after the call ends. Signed, tamper-proof, court-ready. Read more
curl -X POST https://voice.econsent.org/v1/register \ -H "Content-Type: application/json" \ -d '{"email":"you@company.com","name":"Your Name","company":"Your Company"}'Response:
{ "api_key": "ec_voice_a1b2c3d4e5f6...", "tier": "free", "monthly_precall_quota": 5000, "note": "Store this key securely. It will not be shown again."}curl -X POST https://voice.econsent.org/v1/precall \ -H "Authorization: Bearer ec_voice_YOUR_KEY" \ -H "Content-Type: application/json" \ -d '{ "phone": "+15551234567", "calling_entity": "Acme Insurance LLC", "calling_number": "+18005550100", "purpose": "telemarketing", "call_type": "ai_voice" }'If allowed: true, the response includes the FCC-required disclosure script your agent should read at the start of the call. If allowed: false, the response tells you why (no consent, revoked, DNC, AI consent missing).
curl -X POST https://voice.econsent.org/v1/revoke \ -H "Authorization: Bearer ec_voice_YOUR_KEY" \ -H "Content-Type: application/json" \ -d '{ "phone": "+15551234567", "calling_entity": "Acme Insurance LLC", "trigger": "verbal_stop_during_call" }'Future precall checks for this consumer will return allowed: false until fresh consent is captured.
| Language | Package | Install |
|---|---|---|
| Node.js / TypeScript | @econsent/voice | npm install @econsent/voice |
| Python | econsent-voice | pip install econsent-voice |
import { EConsentVoice } from '@econsent/voice';
const voice = new EConsentVoice({ apiKey: process.env.ECONSENT_VOICE_KEY });
const { allowed, disclosure } = await voice.precall({ phone: '+15551234567', callingEntity: 'Acme Insurance LLC', callingNumber: '+18005550100', purpose: 'telemarketing', callType: 'ai_voice',});
if (!allowed) return; // blocked
agent.dial(phone, { disclosure: disclosure.script });| Tier | Price | Precall checks | Verbal captures |
|---|---|---|---|
| Free | $0/mo | 5,000 | 0 |
| Starter | $499/mo | 50,000 | 5,000 |
| Call Center | $999/mo per location | 100,000 | 10,000 |
| Growth | $1,999/mo | 250,000 | 25,000 |
| Scale | $4,999/mo | 1,000,000 | 100,000 |
| Platform | Custom | Unlimited | Unlimited |
POST /v1/revoke and POST /v1/post-call are always free.
| HTTP | Code | Meaning |
|---|---|---|
| 400 | missing_field | Required field not provided |
| 400 | invalid_email | Email format invalid |
| 401 | invalid_api_key | Key missing, malformed, or inactive |
| 402 | quota_exceeded | Monthly quota reached, upgrade required |
| 503 | classifier_unavailable | Classifier service unreachable (retry safe) |
| 500 | internal_error | Server error (retry safe) |
All errors return JSON:
{ "error": { "code": "invalid_api_key", "message": "Missing or malformed Bearer token." }}